gnuplot--三項演算子
要約
3列目の文字列の値によって、
その列の数値をプロットする方法を調べてみた。
IF文では上手にできなかったものの、
三項演算子を用いて成功した。
目的
次のようなデータファイルで、
3列目の文字列がOの場合はその行をプロットし、
3列目の文字列がVの場合はその行をとばしたい。
1 -9.0 O 1 -8.5 O 2 -7.5 O 2 -2.2 O 1 -1.5 O 1 -1.5 O 1 -1.2 V 1 1.2 V 1 1.2 V 2 2.2 V
概要
gnuplotで変数の値を判断する方法として、
IF文が用意されているので、これをもちいることにした。
データファイルにかかれているデータを配列に格納し、
FOR文とIF文を駆使して、できる!
とおもっていたけど、
いざプロットしたら、
思い通りのものが得られなかった。
FOR文をまわすと、一度プロットしたものが消えてしまうようで、
これを解決する方法を見つけられなかったので、
別の方法を探すことにした。
IF文以外の方法なんかあるかなと思っていたら、
三項演算子と1/0を組み合わせることで、値を判断してプロットできることがわかった。
ただし、文字列の判定を条件に入れると、
エラーが出力されたので、文字列は数値に変更することにした。
方法と結果
変数 = ( 条件 ? 真のときの値: 偽のときの値 )
これは次のIF文と同じ結果がえられる。
変数 = function(){ if ( 条件 ){ return 真のときの値; } else { return 偽のときの値; } }
この三項演算子をusingの中に埋め込む。
ただし、文字列の判定はできなかったので、
data.datのO ov V は 2 or 0に書き換えることにした。
data.dat
1 -9.0 2 1 -8.5 2 2 -7.5 2 2 -2.2 2 1 -1.5 2 1 -1.5 2 1 -1.2 0 1 1.2 0 1 1.2 0 2 2.2 0
plot "data.dat" using 1:( $3==2 ? $2 : 1/0)
これで3列目の値に応じてプロットすることができた。