2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Построение графиков через GnuPlot
Сообщение08.03.2021, 01:09 
Аватара пользователя
При построении графика через Gnuplot я использую записанные на винчестер данные после выполнения расчетов в сторонней программе. Т.е. программа считает - пишет в файл на винчестер - Gnuplot считывает с винчестера и строит график. Можно ли избежать записи на винчестер и сразу из программы передавать данные в Gnuplot?

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 02:07 
Принципиально можно сделать это через перенаправление входного потока, но... зачем? В конце концов, даже при полном отсутствии диска куда проще сделать что-нибудь вроде tmpfs в памяти.

P.S. Сначала написал, потом осознал, что ОС вы не указали, а ответ сильно от этого зависит.

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 03:25 
Аватара пользователя
Pphantom в сообщении #1508278 писал(а):
Сначала написал, потом осознал, что ОС вы не указали, а ответ сильно от этого зависит.

OS Linux, язык фортран.

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 04:47 
Тогда и в самом деле делаете перенаправление вывода программы в gnuplot при вызове, после чего отправляете туда обычные команды с одной дополнительной деталью: когда надо будет собственно что-то нарисовать, нужно отправить в выходной поток команду вида
Код:
plot '-' ...
(вместо ... - обычные модификаторы команды), а потом отправлять данные. Признак окончания - закрытие потока (когда программа закончит выполняться) или пустая строка.

Иначе говоря, примерно такой код
Используется синтаксис Fortran
program gnuplotlink
  implicit none

  integer :: i

  write(*,*) "plot '-' w l"
  do i=0,100
    write(*,"(I3,X,F7.4)") i,sin(0.0628*i)
  end do

end program gnuplotlink
 

и последующий вызов (если это скомпилировать в a.out) вида
Код:
./a.out | gnuplot -persist
выдаст картинку с синусоидой. Ключ -persist нужен, чтобы окно gnuplot'а не закрылось сразу после выполнения, если организовать в нем вывод картинки в файл, то он не потребуется.

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 05:07 
Аватара пользователя
Спасибо, получилось. А если нужно вывести график в файл? Как это сделать? Ведь файл *.plt все равно нужен, что бы сделать подписи к графику и т.п. или файл *.plt то же не обязателен и можно как то обойтись без него, организовав нужные подписи в коде программы?

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 11:24 
Snegovik в сообщении #1508287 писал(а):
А если нужно вывести график в файл? Как это сделать?
А это уже делается средствами самого gnuplot'а. Что-нибудь вроде
Код:
set term png
set output "fig.png"
plot sin(x)
выведет картинку в файл fig.png.
Snegovik в сообщении #1508287 писал(а):
или файл *.plt то же не обязателен и можно как то обойтись без него, организовав нужные подписи в коде программы?
Да, конечно. Все, что будет выводить программа, при перенаправлении потока попадет на вход gnuplot'у, так что так можно задать любые команды.

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

 
 
 
 Re: Построение графиков через GnuPlot
Сообщение08.03.2021, 11:41 
Аватара пользователя
Ясно, спасибо. Выходит у меня и так все неплохо сделано, программа пишет в файл, из программы же вызывается gnuplot уже на построение графика с записью в файл. Но вариант когда нужно вывести картинку на экран, который Вы описали, все равно пригодится. :D

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group