Как настроить gnuplot-iostream с C ++?

Я полный нуб к gnuplot и linux в целом. Мне нужно построить научные графики для моего проекта, для которого я буду использовать C ++. После поиска различных доступных вариантов построения я решил использовать gnuplot для построения графиков из-за его особенностей и качества графиков. Поэтому я скачал gnuplot как программу и мог строить графики с использованием файлов .dat, однако мне нужно построить графики в C ++ без явного запуска gnuplot. Можно ли строить динамические графики, используя gnuplot? Я также хотел бы построить решение так, как оно рассчитывается для каждого временного шага!

Я узнал, что интерфейс gnuplot-iostream делает это возможным. Однако я вообще не понимал, как установить эту библиотеку для C ++. Я не понимаю Git или что-либо, размещенное на сайте, чтобы можно было настроить эту библиотеку. Кто-нибудь может указать мне учебник / как документировать для того же? У меня Ubuntu 12.04, а также Windows 8.1.

Можно ли настроить эту библиотеку с IDE (я использую code :: blocks), если да, как это можно сделать?

2

Решение

Прежде всего, 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 Вы должны получить график функции синуса и нескольких точек.

5

Другие решения

недавно я использовал 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
    
  • если решатель сходится, или если нет дополнительных данных для построения графика, установите a = 1 в ‘flag.txt’
  • Gnuplot загружает ‘flag.txt’ и видит, что флаг установлен и перестает перечитывать.
0

По вопросам рекламы [email protected]