2011-07-27 50 views
4

通常使用交互式GNUPLOT我在做的事:gnuplot的蟒蛇发送换行和“ ”

gnuplot> plot "state_log_6548032.data" using 4 with lines lt -1 lw 0.5 title "X axis" ,\ 
>"state_log_6548032.data" using 5 with lines lt 1 lw 0.5 title "Y axis" ,\ 
>"state_log_6548032.data" using 6 with lines lt 2 lw 0.5 title "Z axis" 

然而,当我尝试使用子从蟒蛇做同样的:

gnuplot.write("plot \"%s\" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\ \n" %filename) 
gnuplot.write("plot \"%s\" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\ \n" %filename) 
gnuplot.write("plot \"%s\" using 3 with lines lt 2 lw 0.5 title 'Z axis' \n" %filename) 

我得到以下错误:

gnuplot> plot "state_log_6548032.data" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\ 
                        ^
     line 0: invalid character \ 

gnuplot> plot "state_log_6548032.data" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\ 
                        ^
     line 0: invalid character \ 

我花了很多时间试图找出pytho是否有问题n,但我发现这是gnuplot的一个问题,从控制台调用时出于某种原因使用转义字符,但在我的情况下不需要。但是我的问题依然存在我怎样才能通过管道指令来从python子进程绘制连续行中的^^以上的数据,或者通过从python创建一个gnu文件并调用gnuplot子进程来使用该文件?

编辑:

为了任何人谁可能永远陷在这个简单的小东西:由民间好看谁保持这个社会活着解释如下,巨蟒当您使用“\”转义“\”。 因此,解决办法很干脆:

gnuplot.write("plot \"%s\" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\\\n" %filename) 
     gnuplot.write("\"%s\" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\\\n" %filename) 
     gnuplot.write("\"%s\" using 3 with lines lt 2 lw 0.5 title 'Z axis' \n" %filename) 
+0

你有没有试过[gnuplot模块](http://gnuplot-py.sourceforge.net/)?另外,如果我可以推荐使用[matplotlib](http://matplotlib.sourceforge.net/)来进行绘图。 – Keith

+0

@Keith我有debian的python-gnuplot-1.8,但我找不到任何有关如何使用它的文档。它似乎没有维护。我不知道matplotlib,非常感谢你的链接,这看起来更像我之后的第一个地方! –

回答

4

在命令行GNUPLOT比如你贴,你逃脱换行符,以避免在你的屏幕数英里长的线,但仍送TU GNUPLOT为单行数据。

这很酷,如果你手动输入数据,但如果你正在以编程方式进行,你为什么要关心?只需发送一行,Python就不会抱怨可读性:)。如果您对这个问题感到好奇,那是因为Python 也使用\作为转义序列,所以该字符永远不会到达gnuplot

也就是说,有python-gnuplot库来处理所有这些肮脏的工作。去看一下!

+0

我真的不在乎我是怎么做到的,但这是我知道在gnuplot中发送命令的唯一方法。 agf在另一个问题中告诉我,我可以创建一个tmp文件并将命令放在那里,并将它们一个接一个地输入到gnuplot中。我也想过在gnu文件中输出所有命令并调用gnuplot来加载该文件。但现在我仍然无法获得上述代码的工作。 –

1

我认为当你在Python做\(反弹空间),你逃避的空间,我想,当你做\然后打在gnuplot的输入您”重新转义换行。

你试过了吗,最后只有,\n,python的方式来换行吗?仅用,,(逗号空格)?只需\n

也许,如果你不得不逃离换行,这不是必要的,只是,将工作分开的命令。

+0

你好agf。我试过了,\ n和我得到:第0行:功能预计。 我试过了:\ n虽然它可以工作,但它只绘制第一行。 终于我试过了,\\\ n和它的工作:) 对不起,打扰你这一点。我现在将尝试使用文件自动化它,如您在其他问题中所建议的那样。 –

+0

我试图通过'\'逃脱空间,但他们一直让我回到地球。 – wander95

1

要将字面反斜杠提供给gnuplot,请在Python字符串中使用\\(与使用\n为它提供文字换行符的方式相同)。 \一般会启动转义序列,在你的情况下你有\;对此没有特别的意义,所以它只是被解释为一个空格(即反斜杠被删除)。

您可以通过print来测试字符串的内容,而不是将它们传递给gnuplot.write

这就是说,机会是好的,你可以把整个事情放在一行上,而不是反馈gnuplot反斜杠和换行符。

+0

我已经得到了python-gnuplot-1.8,但我找不到有关如何使用它的任何文档! –

1

在我的Gnuplot 4.6的情况下,和openSUSE Linux的类型和封闭撇号的顺序是非常重要的:用gnuplot的开始作为subprocess.Popen,写作:

gnuplot.stdin.write("set format x '%d %h\\\n%H:%M'") 

...印刷换行符在单一的文字 - 线标签,时:

gnuplot.stdin.write('set format x "%d %h\\\n%H:%M"') 

...按预期工作,沿时间x轴生成双行标签。