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が等しいものを除いて、columnにある文字列ですべてのポイントにラベルを付けたいのですが、その場合はstringが必要です。私が得ているのは、データポイントがとして正しくラベル付けされているが、残りはまったくラベル付けされていないということです14-3.60aaa$4=-3.60aaa


更新:gnuplotは、条件ステートメントを使用して数値1をラベルとして表示することに問題はありません。つまり、任意の列ですが、課せられた条件に関して各ポイントのラベルとして正しく表示されます。つまり、この行には2、条件ステートメントに関するポイントラベルとして列(数値)が表示されます。

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

したがって、明らかに問題は、文字列列と一緒に条件ステートメントを使用することにあります。別々に使用されるこれらのいずれも問題なく動作します。

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からNaN(1/0)に等しい(x)ポイントを設定することだけです。gnuplotはそれらの点を無視しているので、人生は良いです。スクリプトの問題は、gnuplotが文字列入力を期待する列をフィルタリングしていたことだと思いますが、それを確認するのに十分な操作はしていません。gnuplotが数値(x位置)を期待する列にフィルターを切り替えたところ、問題なく機能します。

于 2012-06-27T18:59:06.347 に答える