C ++ и gnuplot - PullRequest
       47

C ++ и gnuplot

9 голосов
/ 08 января 2009

Это мой первый пост, и я довольно новичок в C ++ и компиляции в целом.

Я компилирую программу, которая требует рисования некоторых графиков. Программа создает файл .dat, а затем я должен открыть gnuplot и написать заговор ' .dat'. Это нормально.

Есть ли способ автоматически открыть gnuplot и показать мне нужный мне сюжет? Я должен использовать функцию system () в коде для вызова gnuplot, но как мне заставить его построить то, что мне нужно?

Извините за мой не идеальный английский: s

Спасибо за внимание в любом случае!

Ответы [ 7 ]

8 голосов
/ 08 января 2009

В зависимости от вашей ОС, вы можете использовать popen (). Это позволит вам запустить процесс gnuplot и просто записывать в него, как и любой другой файл *.

Если у вас есть точки данных для построения, вы можете передать их в линию с помощью опции plot "-" ... . Точно так же вы можете изучить установить точки стиля данных / линии / точки линий / и т. Д. опции.


Без паузы или сохранения gnuplot прекратит работу в конце потока ввода. В вашем примере это будет, когда достигнут конец файла.


Чтобы создать (записать) выходной файл (график), используйте:

set terminal png small
set output "filename.png"

Существует множество опций для установки терминала . Png обычно там. Если нет, то возможно gif, tiff или jpeg?

Остерегайтесь перезаписи файла!

Возможно, вы захотите использовать установленный размер 2,2 , чтобы увеличить график. Некоторые варианты set Terminal также позволяют указывать размер.

5 голосов
/ 20 октября 2010

Я изучаю это и сегодня. Вот небольшой пример, который я приготовил.

#include <iostream>
#include <fstream> 
using namespace std;
int main(int argc, char **argv) {
    ofstream file("data.dat");
    file << "#x y" << endl;
    for(int i=0; i<10; i++){
        file << i << ' ' << i*i << endl;
    }
    file.close();
    return 0;
}

Сохраните это как plot.cpp и скомпилируйте это с помощью g ++:

g++ plot.cpp -o plot

Запустите программу для создания файла .dat:

./plot

Сохраните следующий скрипт gnuplot как plot.plt:

set terminal svg enhanced size 1000 1000 fname "Times" fsize 36
set output "plot.svg"
set title "A simple plot of x^2 vs. x"
set xlabel "x"
set ylabel "y"
plot "./data.dat" using 1:2 title ""

Запустите скрипт с gnuplot, чтобы сгенерировать ваш файл .svg:

gnuplot plot.plt

Полученный сюжет будет в plot.svg. Если вы пропустите первые пару строк, которые определяют вывод, он будет отображаться в окне. Повеселись!

2 голосов
/ 08 января 2009

Иногда это так просто, как можно подумать

    gnuplot file

где файл - это ни ваши данные, ни ваш файл результатов, а файл с командой, которую вы вводите в командной строке. Просто введите нужные вам команды (либо укажите постоянный файл, либо сгенерируйте его). После выполнения всех команд в этом файле gnuplot завершает работу.

1 голос
/ 08 января 2009

Вам может понадобиться использовать флаг '-persist' для команды. Я знаю, что в * nix системах этот флаг необходим, если вы хотите, чтобы окно графика оставалось после завершения и завершения процесса gnuplot.

gnuplot -persist commands.gp

Кроме того, вы можете поместить в файл столько команд gnuplot, сколько вам нужно. В этом отношении файл действует как пакетный скрипт.

1 голос
/ 08 января 2009

Да, вы можете. Вы можете создать файл, содержащий команды, которые вы в противном случае набрали бы, чтобы настроить график и открыть gnuplot, запущенный из этого файла. Эта ссылка содержит статью, в которой объясняется, как это сделать. Вы также можете выводить в EPS или другие графические форматы вывода и отображать график, используя другой виджет, который читается в файле.

0 голосов
/ 08 января 2009

Возможно, вам понадобится добавить строку

pause -1

Это покажет график, пока не будет нажата кнопка возврата.
Вероятно, вы видите, что gnuplot запускается и выходит до того, как график успеет отобразиться.

0 голосов
/ 08 января 2009

Возможно, вам потребуется установить тип терминала. Прочтите документацию по gnuplot.

...