Gnuplot发送换行符和“\&引用;来自python

Gnuplot发送换行符和“\&引用;来自python,python,gnuplot,Python,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

通常在交互使用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"
但是,当我尝试使用子流程从python执行相同操作时:

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 \
我花了很多时间试图弄清楚这是否是python的问题,但我发现这是gnuplot的问题,它在从控制台调用时出于某种原因使用转义字符,但在我的情况下不是必需的。然而,我的问题仍然存在。如何从python子流程通过管道化指令,或通过从python创建gnu文件并调用gnuplot子流程使用该文件,在连续行中绘制^^^以上的数据

编辑:

对于任何可能陷入这个简单小事的人来说:正如下面让这个社区保持活力的好人所解释的那样,当你使用“\”时,Python会逃过“\”。 因此,解决办法很简单:

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 )

我认为当你在Python中使用
\
(反冲空格)时,你是在逃避空格,我认为当你使用
\
然后在gnuplot中点击回车键时,你是在逃避换行符

您是否尝试过在结尾处使用python的换行符转义方法
,\n
?仅使用
(逗号空格)?只使用
\n


可能,如果您必须转义换行符,这并不是真正必要的,只需
将用于分离命令。

若要向gnuplot提供文字反斜杠,请在Python字符串中使用
\\
(与使用
\n
向其提供文字换行符的方式相同)<代码>\通常启动转义序列,在您的情况下,您有
\
;这没有什么特别的含义,所以它只是被解释为一个空格(即,删除反斜杠)

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


也就是说,很有可能您可以将整个内容放在一行上,而不是将反斜杠和换行符输入gnuplot。

在您发布的命令行gnuplot示例中,您可以跳过换行符,以避免屏幕上出现一英里长的行,但仍然将数据作为单行发送到gnuplot

如果您手动输入数据,这很酷,但是如果您是以编程方式输入数据,您为什么会在意呢?只需发送一行代码,Python不会抱怨可读性:)。如果你想知道问题出在哪里,那是因为Python也使用
\
作为转义序列,所以字符永远不会到达
gnuplot


也就是说,有python gnuplot库可以为您处理所有这些肮脏的工作。看看他们

在我的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轴生成两条直线标签。

您尝试过该方法吗?另外,如果可以的话,我建议您使用它来进行绘图。@Keith我有带debian的python-gnuplot-1.8,但我找不到任何关于如何使用它的文档。它似乎没有得到维护。我不知道matplotlib,非常感谢你的链接,这看起来更像是我最初想要的!我已经得到了python-gnuplot-1.8,但是我找不到任何关于如何使用它的文档!我真的不在乎如何做,但这是我知道的在gnuplot中发送命令的唯一方法。agf在我发布的另一个问题中告诉我,我可以创建一个tmp文件,并将命令抛出到那里,然后将它们逐个提供给gnuplot。我还考虑过输出gnu文件中的所有命令,并调用gnuplot加载该文件。但是现在我仍然不能让上面的代码工作。你好,agf。我尝试了:,\n并且得到了:第0行:要打印的函数。我尝试过:\n虽然它可以工作,但它只打印第一行。最后我尝试了:,\\\n并且成功了:)很抱歉打扰您。现在,我将尝试使用您在我的另一个问题中建议的文件来实现自动化。我尝试通过
\
逃离空间,但他们一直将我送回地球。