好的,我正在以例如:
的形式将数据传输到GNUplot2013-11-04 20:00:12,875,350,112,29,38,4,44,10,632,121
我在Python代码中设置了以下内容:
gnuplot.stdin.write("plot '-' u 1:2 t 'aa',\
'' u 1:3 t 'aa in',\
'' u 1:4 t 'bb',\
'' u 1:5 t 'bb in',\
'' u 1:6 t 'cc',\
'' u 1:7 t 'cc in',\
'' u 1:8 t 'dd',\
'' u 1:9 t 'dd in',\
'' u 1:10 t 'ee';\n")
击> <击> 撞击> 但是我不断收到错误,例如:
gnuplot> plot '-' u 1:2 t 'aa', '' u 1:3 t 'aa in', '' u 1:4 t 'bb', '' u 1:5 t 'bb in', '' u 1:6 t 'cc', '' u 1:7 t 'cc in', '' u 1:8 t 'dd', '' u 1:9 t 'dd in', '' u 1:10 t 'ee';
^
line 1271: warning: Skipping data file with no valid points
任何想法?
<击> ###更新:### 撞击>
<击>基于@Christoph的反馈;这是我目前正在使用的代码:
cur.execute(sql)
data = cur.fetchall()
c = 0
for k in data:
dataElement = data[c]
gnuplot.stdin.write("plot '-' u 1:2 t 'aa',\
'' u 1:3 t 'aa in',\
'' u 1:4 t 'bb',\
'' u 1:5 t 'bb in',\
'' u 1:6 t 'cc',\
'' u 1:7 t 'cc in',\
'' u 1:8 t 'dd',\
'' u 1:9 t 'dd in',\
'' u 1:10 t 'ee';\n")
gnuplot.stdin.write("%s,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i\n" % dataElement[:])
gnuplot.stdin.write("e\n")
c = c + 1
击> <击> 撞击>
答案 0 :(得分:2)
您必须为每个'-'
编写一个自己的数据块。 ''
仅保存您重新输入文件名,但不会重复使用数据。考虑例如以下gnuplot脚本:
plot '-', '-'
2
4
6
e
10
12
14
e
还要确保您的分隔符设置正确:set datafile separator ','
。
这是一个最小的python脚本,它绘制了stdin
的两个数据集,其中的列用逗号分隔:
#!/usr/bin/env python
import subprocess
gnuplot = subprocess.Popen(["gnuplot"], stdin=subprocess.PIPE)
gp_wrt = gnuplot.stdin.write
gp_wrt("set terminal pngcairo\n")
gp_wrt("set output 'test.png'\n")
gp_wrt("set datafile separator ','\n")
gp_wrt("plot '-' with lines title 'mytitle',\
'-' with lines title 'other title'\n")
for i in range(11):
gp_wrt("{},{}\n".format(i, i**2))
gp_wrt("e\n")
for i in range(11):
gp_wrt("{},{}\n".format(i, (0.5*i)**2))
gp_wrt("e\n")
因此,对于您的数据,它可能看起来像
gnuplot.stdin.write("plot '-' u 1:2 t 'aa',\
'' u 1:3 t 'aa in',\
'' u 1:4 t 'bb',\
'' u 1:5 t 'bb in',\
'' u 1:6 t 'cc',\
'' u 1:7 t 'cc in',\
'' u 1:8 t 'dd',\
'' u 1:9 t 'dd in',\
'' u 1:10 t 'ee';\n")
for i in range(10):
for dataElement in data:
gnuplot.stdin.write("%s,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i\n" % dataElement[:])
gnuplot.stdin.write("e\n")
但在这种情况下你可以简单地使用:
gnuplot.stdin.write("plot '-' u 1:2 t 'aa',\
'' u 1:2 t 'aa in',\
'' u 1:2 t 'bb',\
'' u 1:2 t 'bb in',\
'' u 1:2 t 'cc',\
'' u 1:2 t 'cc in',\
'' u 1:2 t 'dd',\
'' u 1:2 t 'dd in',\
'' u 1:2 t 'ee';\n")
for i in range(10):
for dataElement in data:
gnuplot.stdin.write("%s,%i\n" % (dataElement[0], dataElement[i])
gnuplot.stdin.write("e\n")
即。每次只写相关列。
答案 1 :(得分:2)
以下代码解决了这个问题:
gnuplot.stdin.write("plot '-' u 1:2 t 'aa', " + \
" '-' u 1:2 t 'aa in', " + \
"'-' u 1:2 t 'bb', " + \
"'-' u 1:2 t 'bb in', " + \
"'-' u 1:2 t 'cc', " + \
"'-' u 1:2 t 'cc in', " + \
"'-' u 1:2 t 'dd', " + \
"'-' u 1:2 t 'dd in', " + \
"'-' u 1:2 t 'ee', " + \
"'-' u 1:2 t 'ee in';\n")
for n in range(10):
for dataElement in data:
a = n + 1
if a == 11:
break
else:
gnuplot.stdin.write("%s,%i\n" % (dataElement[0],dataElement[a]))
gnuplot.stdin.write("e\n")
gnuplot.stdin.flush()
答案 2 :(得分:0)
将空格分隔的数据换行到此工具:
https://github.com/dkogan/feedgnuplot
它会向gnuplot提供正确的命令,并制作情节。如果你想从中获取一个gnuplot脚本,请使用--dump。