繁体   English   中英

gnuplot,如何只标记某些点?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM