我正在使用以下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列。任何这些单独使用都可以正常工作。
答案 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位置)的列,它可以正常工作。