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

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

Вопрос:

Я полный 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 и видит, что флаг установлен и перестает перечитываться.

Оцените статью
Добавить комментарий