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

Gnuplot plot specific lines from data file

我有一个包含 24 行和 3 列的数据文件。我怎样才能只绘制来自特定行的数据,例如3、7、9、14、18、21? 现在我使用下面的命令

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

绘制所有 24 条线。

我尝试了 every 命令,但找不到可行的方法。

未经测试,但类似这样

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

也就是说..."in general, don't print anything (-n), but, if you do see a line containing SetA, delete the hash sign and everything after it and print the line".

或者如果你想要 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 列中的标签以 "a"

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

您可以通过让 using 语句 return "NaN".

跳过这些行

如果所需的行号是任意的,您可以使用这个丑陋的技巧:

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

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

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