Я полный нуб к gnuplot и linux в целом. Мне нужно построить научные графики для моего проекта, для которого я буду использовать C ++. После поиска различных доступных вариантов построения я решил использовать gnuplot для построения графиков из-за его особенностей и качества графиков. Поэтому я скачал gnuplot как программу и мог строить графики с использованием файлов .dat, однако мне нужно построить графики в C ++ без явного запуска gnuplot. Можно ли строить динамические графики, используя gnuplot? Я также хотел бы построить решение так, как оно рассчитывается для каждого временного шага!
Я узнал, что интерфейс gnuplot-iostream делает это возможным. Однако я вообще не понимал, как установить эту библиотеку для C ++. Я не понимаю Git или что-либо, размещенное на сайте, чтобы можно было настроить эту библиотеку. Кто-нибудь может указать мне учебник / как документировать для того же? У меня Ubuntu 12.04, а также Windows 8.1.
Можно ли настроить эту библиотеку с IDE (я использую code :: blocks), если да, как это можно сделать?
Прежде всего, gnuplot-iostream использует библиотеку Boost, это очень распространенная библиотека, но она не поставляется вместе с компилятором C ++, поэтому убедитесь, что она установлена правильно.
Очевидно, он также нуждается в gnuplot: если он правильно установлен, вы сможете запустить его из терминала.
Затем вставьте этот минимальный пример в файл main.cpp:
#include <vector>
#include <utility>
#include "gnuplot-iostream.h"
int main() {
std::vector<std::pair<double,double>> data;
data.emplace_back(-2,-0.8);
data.emplace_back(-1,-0.4);
data.emplace_back(0,-0);
data.emplace_back(1,0.4);
data.emplace_back(1,0.8);
Gnuplot gp;
gp << "plot [-5:5] sin(x) tit 'sin(x)', '-' tit 'data'\n";
gp.send1d(data);
return 0;
}
Сохранить заголовок gnuplot-iostream.h
в той же папке и скомпилировать с:
g++ -std=c++11 main.cpp -o main -lboost_iostreams -lboost_system -lboost_filesystem
При беге ./main
Вы должны получить график функции синуса и нескольких точек.
недавно я использовал Gnuplot для визуализации данных из итерационного решателя. Чтобы запустить Gnuplot в режиме «псевдо» в реальном времени, я сделал следующие шаги:
установить конвейер от C ++ до Gnuplot:
FILE * GnuPipe = popen («… \ bin \ pgnuplot -persist», «w»);
запустите решатель (или источник данных) и запишите в файл, например. ‘Data.txt’
запустите скрипт, который скажет Gnuplot перерисовать data.txt, если флаг НЕ установлен. В этом случае я создал текстовый файл ‘flag.txt’ и записал в a = 0, который служит флагом. Скрипт для Gnuplot может выглядеть так:
load 'flag.txt'
plot 'data.txt' u 1:2 with lines
pause 0.1
if (a==0) reread