Вопрос:
Я полный noob для 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 вы должны получить график функции синуса и нескольких точек.
Ответ №1
Недавно я использовал Gnuplot для визуализации данных из итеративного решателя. Чтобы запустить Gnuplot в “псевдо” в реальном времени, я сделал следующие шаги:
-
установить трубопровод от C++ до Gnuplot:
FILE * GnuPipe = popen (“…binpgnuplot -persist”, “w”);
-
запустите решатель (или источник данных) и напишите в файл, например ‘data.txt’
-
запустите скрипт, который сообщает Gnuplot, чтобы он поменял файл data.txt, пока флаг НЕ установлен. В этом случае я создал текстовый файл ‘flag.txt’ и написал в = 0, который служит в качестве флага. Скрипт для Gnuplot может выглядеть так:
load ‘flag.txt’ plot ‘data.txt’ u 1:2 with lines pause 0.1 if (a==0) reread
- если решатель сходится или нет дальнейших данных для построения, установите a = 1 в ‘flag.txt’
- Gnuplot загружает файл flag.txt и видит, что флаг установлен и перестает перечитываться.