如何从gnuplot中相同的标准输入数据绘制多个图?

如何从gnuplot中相同的标准输入数据绘制多个图?,gnuplot,Gnuplot,我想要一个.plt文件来存储数据和gnuplot命令。我的数据看起来像 # x1 y1 x2 y2 1 2 3 4 5 6 7 8 对应于两个图:(x1,y1)和(x2,y2) 我知道我可以像这样使用“-”: plot "-" using 1:2 # x1 y1 x2 y2 1 2 3 4 5 6 7 8 e 但这只会生成一个图,即(x1,y1)。我正试着做类似的事情 plot "-" using 1:2, "-" using 3:4 # x1 y1

我想要一个.plt文件来存储数据和gnuplot命令。我的数据看起来像

# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
对应于两个图:(x1,y1)和(x2,y2)

我知道我可以像这样使用
“-”

plot "-" using 1:2
# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
e
但这只会生成一个图,即(x1,y1)。我正试着做类似的事情

plot "-" using 1:2, "-" using 3:4
# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
e
但显然这不起作用,因为gnuplot希望第二个
“-”
的标准输入中有一组新的数据

注:

  • 我无法更改数据的样式。它分为四列
  • 似乎我可以用
    重读
    来完成,但这需要两个文件。我真的只想要一个文件

  • 我不确定您可以编辑多少文件,但最整洁的方法可能是将整个内容放在shell脚本/批处理脚本中(您是在linux还是windows上?)

    在linux上,我会这样做

    #!/bin/bash
    
    #put my data in a file
    echo "
    # x1 y1 x2 y2
      1  2  3  4
      5  6  7  8
    " > my_dat.dat
    
    #launch gnuplot
    gnuplot<<EOF
    #gnuplot commands here
    set output "test.ps"
    set term postscript
    
    plot "my_dat.dat" u 1:2, \
         "my_dat.dat" u 3:4
    
    set term pop
    set output
    
    EOF
    
    # cleanup
    rm my_dat.dat
    
    #/bin/bash
    #把我的数据放在一个文件里
    回声“
    #x1 y1 x2 y2
    1  2  3  4
    5  6  7  8
    “>my_dat.dat
    #启动gnuplot
    
    gnuplot如果不修改有关数据输入方式的某些内容,则无法执行此操作。当通过标准输入提供gnuplot数据时,它希望多个数据集之间用两个空行分隔,或者在连续的行上交错。这些选择包括:

    • 将两个数据集馈送到不同的 全部打印命令

    • 改变 文件格式,以便数据集 他们之间的空白行,然后 用索引引用它们

    • 更改文件格式,以便 交替的线条代表不同的颜色 数据集,然后引用它们 每一次

    • 把数据放进一个 文件,将打印脚本转换为 另一个,然后引用数据 使用不同的 每次都使用子句


    这里有一个关于each和index命令的介绍,从?这些是gnuplot中为这类事情构建的唯一设施,它们都不完全符合您的要求。很好,您已经修改了数据格式,因为这永远不会像您最初希望的那样起作用。

    我知道这是一篇老文章,但我想指出另一种策略,以防其他人仍在解决此问题:

    也可以使用“打印”命令输入两次数据,如:

    plot "-" using 1:2, "-" using 3:4
    # 1  2  3  4
      5  6  7  8
      e
      1  2  3  4
      5  6  7  8
      e
    
    在这种情况下,Gnuplot实际上将等待两个块。当我不想更改命令以及通过管道向Gnuplot提供信息时,我发现这非常有用。在实时场景中(取决于数据大小),这很可能比缓冲到硬盘上的文件还要快

    根据我的经验,在脚本中缓冲数据所需的代码量非常低,需要多次管道传输数据。

    自gp5.0以来的新选项(另请参见
    帮助内联数据
    ):


    $dataset谢谢。是的,我在Linux上。实际上,我通过修改生成的C++代码成功地改变了数据格式。所以我的问题现在解决了。但我仍然很好奇,人们怎么能做到这样,我就可以看到上面格式的一个file.plt文件,并发布
    $gnuplot file.plt
    @Mahdiyar是的,我也很好奇。使用GnUrPro和脚本是我通常的方式(你可以调用shell中的C++程序,也使整个事情用1行来工作),请参阅更多关于此的内容。我喜欢这个shell脚本方法,因为我只想让我的应用程序生成一个可绘制的文件。要保持文件系统干净,请使用bash tempfile命令:
    tmpFile=`tempfile`
    ,然后在plot命令中使用
    plot“$tmpFile”1:2…
    @Rian,谢谢,我以前没有见过bash命令-非常方便!谢谢很高兴知道什么可以做,什么不能做(我希望这可以做到)。虽然我已经改变了我的文件,但是C++代码会更快地生成原始格式,我更喜欢它。总之,有一个简单的问题:显然我不能把
    “-”
    每一个都组合起来,对吗?你能举个例子吗?无论我做什么,gnuplot(在执行第一个绘图时)一直读取到最后。
    
    $dataset << EOD
    1 2 3 4 
    5 6 7 8
    EOD
    
    plot $dataset using 1:2, $dataset using 3:4