我正在使用gnuplot(通过带有PyGnuplot的Python)作为来自Arduino的数字数据的实时绘图仪。另外,我想在任意点上保存情节。每当我尝试在进行实时绘图时从gnuplot保存pdf / jpg时,gnuplot便会寄宿。
我认为有必要在将图另存为pdf之前重新启动gnuplot-进程-使用PyGnuplot.c('quit')或类似命令根本无法正常工作。当我使用不同的python脚本进行实时打印和保存pdf时,一切正常,但是我知道不必运行两个脚本。
这是一个正在运行(分别未运行)的最小示例:
import random,time
import PyGnuplot as gp
filename = "data.txt"
def rand():
return random.random()
def writetxt(file,info):
fobj = open(file, "a")
fobj.write(info)
fobj.close()
def liveplot(file):
gp.c('plot "' + file + '" with lines')
def plotinfile(dat):
gp.c('set terminal pdf')
gp.c('set output "example.pdf"')
gp.c('plot "' + dat + '" with lines')
gp.c('unset output')
gp.c('set terminal x11')
for i in range(10):
onerow = str(i) + " " + str(rand()) + " " + str(rand()) #simulate incoming data
print(onerow) #print in console for comparison
writetxt(filename ,onerow + "\n") #write data into txt-file
liveplot(filename) #liveplot the data from txt-file
if i == 4: #simulate an arbitrary point for saving
plotinfile(filename) #save graph from txt-file to pdf
time.sleep(1) #incoming data occurs only every second
答案 0 :(得分:0)
gnuplot将不会关闭输出文件,直到(1)终端类型更改为其他类型或(2)存在显式命令“未设置输出”。否则,gnuplot等待查看是否还有另一个plot命令将进入相同的输出文件。
答案 1 :(得分:0)
我相信您想向曲线添加曲线或添加数据点,并间歇保存。如果是这样,则应满足以下条件:
python
>>> import PyGnuplot as gp
>>> gp.c('plot sin(x)')
>>> gp.pdf('sin_graph.pdf') # discretionary save point 1
>>> gp.c('replot cos(x)') # add a new curve
>>> gp.pdf('sin_and_cos_graph.pdf') # discretionary save point 2
如果只有pdfcario终端而不是pdf,那么您需要自己编写pdf来解决pygnuplot c.pdf脚本:
>>>filename = 'sin_graph.pdf'
>>>gp.c('set term pdf enhanced size 14cm, 9cm color solid')
>>>gp.c('set out "' + filename + '";')
>>>gp.c('replot;')
>>>term='x11` # or whatever term you typically use
>>>gp.c('set term ' + str(term) + '; replot')
您可以将此例程包装到以filename
和terminal
作为参数的函数中。无论如何,每次您要打印pdf时都必须执行这一系列命令。
答案 2 :(得分:0)
问题是:二手终端不在手边。使用另一个终端解决了该问题。谢谢你的帮助。在PyGnuplot中使用了x11终端-这对我不可用(我仍然不知道为什么,不知道如何安装它,仍然不知道如何使用PyGnuplot结束gnuplot进程...)< / p>