[英]gnuplot, how to label only certain points?
我正在使用以下gnuplot
命令来创建一个图:
#!/bin/bash
gnuplot << 'EOF'
set term postscript portrait color enhanced
set output 'out.ps'
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $1:'aaa') w labels
EOF
其中data_file
如下所示:
O4 -1.20 -0.33 -5.20
O9.5 -1.10 -0.30 -3.60
B0 -1.08 -0.30 -3.25
B0.5 -1.00 -0.28 -2.60
B1.5 -0.90 -0.25 -2.10
B2.5 -0.80 -0.22 -1.50
B3 -0.69 -0.20 -1.10
我希望gnuplot用第1
列中找到的字符串标记所有点, 除了第4
列等于-3.60
在这种情况下我想要aaa
字符串。 什么我得到的是, $4=-3.60
数据点被正确标注为aaa
,但其余的没有被标记的 。
更新 :gnuplot使用条件语句将数字显示为标签没有问题,即:除了1
任何列都正确地显示为关于所施加的条件的每个点的标签。 也就是说,此行将第2
列(numbres)显示为关于条件语句的点标签:
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels
更新2 :如果我将其作为一个整体绘制,即不使用条件语句,将列1
绘制为点标签也没有问题。 也就是说,此行正确绘制了第1
列(字符串)中的所有点标签:
plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels
很明显,问题在于将条件语句与strings列一起使用。 任何单独使用的工作都很好。
以更干净的方式,这应该工作。 如果没有在字符串中转换,则标签似乎无法显示计算出的数字。
#!/bin/bash
gnuplot << 'EOF'
set term postscript portrait color enhanced
set output 'out.ps'
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? sprintf("%d",$1):'aaa') w labels
EOF
这是你想要的吗?
#!/bin/bash
gnuplot << 'EOF'
set term postscript portrait color enhanced
set output 'out.ps'
plot 'data_file' u 3:2 w points , \
'' u (($4 == -3.60)? 1/0 : $3):2:1 w labels
EOF
我在这里所做的是设置(x)点,其中列4等于-3.6到NaN( 1/0
)。 由于gnuplot忽略了这些点,生活是美好的。 我认为你的脚本的问题是你正在过滤一个gnuplot期望字符串输入的列 - 尽管我还没有用它来验证它。 我只是将过滤器切换到gnuplot期望数字(x位置)的列,它工作得很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.