Gnuplot绘制数据文件中的特定行

时间:2015-08-30 20:18:51

标签: gnuplot

我有一个包含24行和3列的数据文件。如何仅绘制来自特定行的数据,例如3,7,9,14,18,21? 现在我使用以下命令

plot 'xy.dat' using 0:2:3:xticlabels(1) with boxerrorbars ls 2

绘制所有24行。

我尝试了every命令,但无法找到有效的方法。

2 个答案:

答案 0 :(得分:3)

未经测试,但有类似的内容

plot "<(sed -n -e 3p -e 7p -e 9p xy.dat)" using ...

另一个选项可能是注释您的数据文件,如果看起来,它包含多个数据集。假设你创建了这样的数据文件:

1 2 3
2 1 3 # SetA
2 7 3 # SetB
2 2 1 # SetA SetB SetC

然后,如果你只想要SetA,你可以在情节陈述中使用这个sed命令

sed -ne '/SetA/s/#.*//p' xy.dat
2 1 3
2 2 1

那说...... “一般情况下,不要打印任何内容(-n),但是,如果你确实看到包含SetA的行,请删除哈希符号以及之后的所有内容它并打印“

或如果您需要SetB,则可以使用

sed -ne '/SetB/s/#.*//p' xy.dat
2 7 3
2 2 1

或者如果你想要整个数据文件,但是我们的评论被删除了

sed -e 's/#.*//' xy.dat

如果您想要SetBSetC,请使用

sed -ne '/Set[BC]/s/#.*//p' xy.dat
2 7 3 
2 2 1

答案 1 :(得分:2)

如果您想要的线条具有可以评估的共同点,例如第1列中的标签以&#34; a&#34;

开头
 plot dataf using (strcol(1)[1:1] eq "a" ? $0 : NaN):2:xticslabel(1)

你可以通过让using语句返回&#34; NaN&#34;来跳过这些行。

这是一个丑陋的黑客,你可以使用,以防所需的行号是任意的:

linnum = " 1 3 7 12 16 21 "
plot dataf using (strstrt(linnum," ".int($0)." ") != 0 ? $0 : NaN):2

strstrt(a,b)返回字符串b中字符串b的位置,如果没有出现,则返回零。我添加了两个空格以使行号唯一。

但我建议在这种情况下使用外部程序预处理数据,请参阅另一个答案。