2012-04-09 101 views
1

我有一个python脚本,它使用gnuplot生成一个图形。但是我有一个错误:Gnuplot:第0行:函数绘制预期

的gnuplot>积 ^ 线0:函数绘制预期

g=Gnuplot.Gnuplot(persist=1) 
    g.title('Read&Write Performance') 
    g.xlabel('minutes') 
    g.ylabel('MB/s') 
    g('set term png') 
    g('set out') 
    g('set yrange [0:70]') 
    d1=Gnuplot.Data(self.time,self.list1,title="perfr", with_="line") 
    d2=Gnuplot.Data(self.time,self.list2,title="perfw", with_="line") 
    time.sleep(2) 
    g.hardcopy('bench.png',terminal = 'png') 
    g.reset() 

self.list1 = [12,15,17] self.list2 = [43, 48,49]

我不明白为什么我有这个错误。

谢谢:)

+0

你在说[Gnuplot.py](http://gnuplot-py.sourceforge.net/)吗?我没有用太多 - 但叫'time.sleep'看起来有点嫌疑。有没有办法看到发送给gnuplot的代码?这可能会更容易看到什么是错的。此外,它看起来像这个项目还没有更新很长一段时间 - 可以想象,它与最近版本的gnuplot不兼容。您可能会发现使用[matplotlib](http://matplotlib.sourceforge.net/)更容易。 – James 2012-04-09 11:03:20

+0

我读过time.sleep,帮助gnuplot完全执行命令。 – Matt 2012-04-09 11:38:45

+0

它似乎并不像你实际发送的数据被绘制在任何地方。仔细阅读一下'test.py'后,我认为你应该在那里有一条线,比如......'g.plot(d1)'...如果你想让它们一起出现,我不知道它的工作原理... – mgilson 2012-04-09 12:24:54

回答

2

一个非常简短看看源后,似乎g.plot()的情节不发送到一个窗口(如x11),但到哪里gnuplot的当前配置发送剧情。所以,(我认为)最简单的解决方案是 -

g('set terminal png') 
g('set output "bench.png"') 
g.plot(d1) #d1 should not be in "bench.png" 
#This might work to plot both datasets together ... g.plot(d1,d2) 

这应该只要gnuplot的-PY的内部不复位每当plot命令发出gnuplot的脚本工作。我非常怀疑这种情况,因为__call__方法似乎是API的重要组成部分。

+0

你是对的mgilson!它非常完美。它工作正常。 非常感谢:) – Matt 2012-04-09 16:42:08

+0

没问题。乐意效劳。 – mgilson 2012-04-09 19:20:30

+0

这个答案解决了我在将Bash脚本转换为OSX时遇到的一个问题,即我需要在终端和输出中设置终端。我试图直接在终端上运行gnuplot的图,但不明白为什么命令在这里不起作用http://apple.stackexchange.com/q/178916/15504 – 2015-03-30 13:19:53