如何从gnuplot中相同的标准输入数据绘制多个图?
我想要一个.plt文件来存储数据和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
# 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