l oop заговор в gnuplot в том же окне - PullRequest
0 голосов
/ 05 апреля 2020

Я запускаю программу, которая использует подпрограмму для gnuplot. Я запускаю скрипт и должен просматривать результирующий график в режиме реального времени.

Внутри do l oop команда заговора будет появляться, скажем, 100 раз. Из-за этого я получаю 100 отдельных gnuplot windows, содержащих график.

Программа похожа на

do i=1,100
...
...
call plota1(x,y)
end do

Есть ли такой способ, что я не получаю такие 100 графиков, только один и, скажем, когда (i + 1) -й график появится, он появится в том же окне gnuplot, заменив i-й график?

Используемая подпрограмма построения графика выглядит следующим образом.

subroutine plota1(x,y)
real*8::x(:),y(:)
integer l,u,i
l=lbound(x(:),dim=1)
u=ubound(x(:),dim=1)
open(1,file="p.dat")
open(2,file="p.plt")

do i=l,u
write(1,*) x(i),y(i)
end do


write(2,*) "p 'p.dat' u 1:2 w l"

call execute_command_line('gnuplot -p p.plt')
close(1,status='delete')
close(2,status='delete')
end subroutine plota1

Команда построения графика происходит из строки "write (2, *)" p 'p.dat' u 1: 2 wl "". Что я должен добавить туда, чтобы получить желаемый результат? Если нет никакой возможности, советы по использованию какого-либо другого программного обеспечения также будут полезны.

1 Ответ

0 голосов
/ 07 апреля 2020

Подпрограмма, которую вы показываете, выполняет две вещи. Он создает новый файл данных, а затем создает новый экземпляр gnuplot для отображения данных в этом файле. Это не то, что вы хотите. Вы хотите, чтобы целевая подпрограмма заполнила файл данных новыми данными, а затем отдельная подпрограмма (или прямой вызов из основной программы), чтобы сообщить уже существующему экземпляру gnuplot, чтобы построить данные из этого новый файл. Т.е. вам нужно разделить этапы открытия экземпляра gnuplot и последующей отправки ему команд. Поскольку вы не говорите, какую библиотеку вы используете, люди не могут посоветовать вам, содержит ли она соответствующие подпрограммы или нет.

...