読者です 読者をやめる 読者になる 読者になる

箱の中の自由粒子

政治・経済・世界情勢などを多角的な視点から考察し、正義を貫く誇り高いブログ。

日常の備忘録。だがしかし、見返すことはない。

gnuplot--三項演算子

要約

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

gnuplot

plot "data.dat" using 1:( $3==2 ? $2 : 1/0)

これで3列目の値に応じてプロットすることができた。

参考