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
如果您想要 SetB
和 SetC
,请使用
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中的位置,没有出现则为零。我添加了两个空格以使行号唯一。
但我建议在这种情况下使用外部程序来预处理数据,请参阅其他答案。
我有一个包含 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
如果您想要 SetB
和 SetC
,请使用
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中的位置,没有出现则为零。我添加了两个空格以使行号唯一。
但我建议在这种情况下使用外部程序来预处理数据,请参阅其他答案。