使用gnuplot绘制多个图形取决于列值

4
我有以下数据,想要使用GNUPLOT进行绘制:
#TIME #VALUE #SOURCE
1 100 A
1 88 B
2 115 A
2 100 B
3 130 A
3 210 B

我希望能够根据#SOURCE列的值绘制两条线。一条线代表A,另一条线代表B。通过GNUPLOT是否可以实现这个功能?
同时,是否可以在#TIME上进行#VALUE的求和并绘制出来?也就是说,对于#TIME中相等的所有条目,将#VALUE的值加起来。
谢谢, Frank

可能是如何使用GNUPlot根据列中的值绘制单个/多个线条的重复问题。 - Ciro Santilli OurBigBook.com
1个回答

2

一种方法是使用 grep 查找以 AB 结尾的行,并绘制结果。如果您知道字符行会以什么结尾,您可以使用 for 循环在单个绘图行中完成此操作:

plot for [s in 'A B'] sprintf("<(grep -v '%s$' data.dat)", s) u 1:2 w l

这将把你提供的数据(保存在data.dat中)绘制为两条不同的线。

你也可以将for循环的部分更改为[s in 'word1 word2 word3']或其他任何你喜欢的字符串。如果你不知道每行将以哪个字符/单词结束,你可能需要先通过第一次传递文件来确定for循环的字符串,然后再通过第二次传递进行绘图。


谢谢您的回答!由于我不知道源的名称,因此我修改了编写数据文件的例程。现在,我仅为每个源设有一列(ValueA,ValueB等),并使用[plot 'file.csv' u 2:1 title 'A','file.csv' u 3:1 title 'B',...]来绘制它。 - Aaginor
请参考如何在gnuplot中使用数据列作为图例?的示例,了解如何提取一列的唯一值。 - Christoph
针对[s in 'a b c d e f g']绘制图表,使用sprintf("<(grep -v '%s$' testdata1.dat)", s) u 1:3 w l。但是我遇到了错误:在版本4.0中,s表达式无效。为什么会这样? - GP92
我已经在Windows中尝试了5.0版本,但我在那里收到了错误消息:“无法传送数据”……是Windows中的传送语法不同吗? - GP92
我不确定在Windows上是否需要安装bashgrep(并且在PATH中运行带有grepbash来运行gnuplot)。在Windows上可能会有一些其他的管道语法,但我不确定。 - ilent2
关于我使用的 gnuplot 版本:版本为 4.6 补丁级别 5(Linux x86_64)。我认为这种特定的 for 语法是在 4.4+ 中引入的。 - ilent2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接