自分はgnuplotを使ってグラフを描いています。
実験結果をグラフにする際に、データ取得ミスなどでデータが変な値(すなわち、自分が予想する値域から外れた値)を出力することがあります。
gnuplotなどグラフ描画ソフトを使ったことある方なら、わかると思いますが、線つなぎ、点と線で繋ぐなどやっていると、おかしなところに線が吹っ飛びます。
今回はそれを無くすための設定を記載していきます。
C言語の三項演算子を使う。
元々大学一年生の授業でプログラミング入門みたいな授業でC言語を学んだ程度なので、そんなものは知りません。
なので、知らない人が知らない人のためにわかりやすく説明したいと思います。
いつも使っているソースコードは以下
set parametric
set size square
set xtics 500
set ytics 250
set xrange[-2250:2250]
set yrange[-2250:2250]
set xlabel'x(mm)' font "Arial,16"
set ylabel'y(mm)' font "Arial,16"
set title "グラフのタイトル記入しましょう" font "Arial,20"
set grid
set terminal eps #この出力はpngでも可能。それ以外はわかりません。
set output "/hoge.eps" #絶対パスでも記述可能です。
plot [0:2*pi] 2000*cos(t),2000*sin(t) lw 8 title "course" ,\
"1kaime_take1.txt" every 2::5:: u ($4 > -2000 && $4 < 2000 ? $4 : 1/0):($5 > -2000 && $5 < 2000 ? $5 : 1/0) with lines lw 3 title "1号機" ,\
"1kaime_take1.txt" every 2::6:: u ($1 > -2000 && $1 < 2000 ? $1 : 1/0):($2 > -2000 && $2 < 2000 ? $2 : 1/0) with lines lw 3 title "2号機"
set output
一行ずつコメントしていくのは大変な作業なので割愛。
大事な部分は以下です。
"1kaime_take1.txt" every 2::5:: u ($4 > -2000 && $4 < 2000 ? $4 : 1/0):($5 > -2000 && $5 < 2000 ? $5 : 1/0) with lines lw 3 title "1号機" ,\
この行でグラフを描いています。
その中の u ($4 > -2000 && $4 < 2000 ? $4 : 1/0):($5 > -2000 && $5 < 2000 ? $5 : 1/0)
の部分が大切
まず大きなくくりとして、usingコマンドを使っています。
using 1:2
# これだと、1列目をx軸へセット、2列目をy軸へセット。
# すなわち、x-y軸を入れ替えたい場合は using 2:1にすれば入れ替わります。
usingコマンドの内部を見ていきましょう。
これが重要な三項演算子である。
x < 0 ? 0 : x
↑が三項演算子の大まかな使い方である。
x<0のとき、0を、それ以外の場合(x>=0)はxを出力という具合である。
もっとわかりやすく説明すると
[条件式] ? [条件式が正のときの処理] : [条件式が偽のときの処理]
という形である。
これが私の場合のソースコードである。
$4 > -2000 && $4 < 2000 ? $4 : 1/0
4列目の値が -2000 < $4 < 2000の場合は4列目の値をそのまま出力
偽の場合は1/0を出力。
いや、1/0ってなによ。ゼロディビジョンエラーやろ
そうだそうだ、ZerodivisionErrorやろ
ZeroDivisionError: division by zero
そうそうこいつだ、きもいやつ
まぁ、お遊びはこのあたりで。
gnuplotで値をplotしたくないときには1/0
と入力することで、値をプロットしないようにできます。
重要なので、もう一度言っときます
gnuplotでは、1/0
と記入することで、値をプロットしないようにできます。
こんなコアなことを調べてる皆さんなので、わかっていると思いますが
ターミナル上で以下のように入力することで、gpファイルを実行することができます。
$ gnuplot plot.gp
覚えておいて損はないでしょう。
それでは。
参考サイト