8

我正在使用以下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 用 column 中找到的字符串标记所有1除了column4等于的那个点,-3.60在这种情况下我想要aaa字符串。我得到的是$4=-3.60数据点被正确标记为aaa,但其余的根本没有被标记


更新:gnuplot 使用条件语句将数字显示为标签没有问题,即:任何列,但1正确显示为尊重所施加条件的每个点的标签。也就是说,该行将列2(数字)显示为符合条件语句的点标签:

plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels

更新 21 :如果我将它作为一个整体绘制,即不使用条件语句,它在将列绘制为点标签时也没有问题。也就是说,这条线正确地绘制了列(字符串)中的所有点标签:1

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

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

4

2 回答 2

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
于 2012-07-13T13:21:09.307 回答
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

我在这里所做的只是将第 4 列等于 -3.6 的 (x) 点设置为 NaN ( 1/0)。由于 gnuplot 忽略了这些点,生活是美好的。我认为您的脚本的问题在于您正在过滤 gnuplot 需要字符串输入的列 - 尽管我没有充分使用它来验证这一点。我刚刚将过滤器切换到 gnuplot 需要数字(x 位置)的列,它工作得很好。

于 2012-06-27T18:59:06.347 回答