gnuplot,如何只标记某些点?

时间:2012-06-27 14:38:35

标签: conditional gnuplot labels

我正在使用以下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等于{ {1}}在这种情况下,我想要-3.60字符串。我得到的是aaa数据点被正确标记为$4=-3.60,但其余数据点未被标记为


更新:gnuplot使用条件语句显示数字作为标签没有问题,即:除aaa之外的任何列都正确显示为每个标签尊重所施加的条件。也就是说,此行显示列1(numbres)作为关于条件语句的点标签:

2

更新2 :如果我将列plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels 绘制为整体,即未使用,也可以将列1绘制为点标签条件声明。也就是说,此行正确显示所有1(字符串)中的点标签:

plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels

很明显,问题在于将条件语句一起使用与strings列。任何这些单独使用都可以正常工作。

2 个答案:

答案 0 :(得分:5)

或许更干净的方式,这应该有效。如果没有在字符串中转换,标签似乎无法显示计算出的数字。

#!/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

答案 1 :(得分:3)

这是你想要的吗?

#!/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位置)的列,它可以正常工作。