gnuplotで面グラフっぽいものを描きたい
遺伝的アルゴリズムで遊んでいたときに、計算の過程をグラフ化してみたいなと思いまして。 作りたかったのはこんなやつ。
赤い線が平均値、薄いピンクっぽい幅の広い帯(?)が各世代での適応度の範囲です。 まあつまりは、こんな感じで幅のある折れ線グラフ的なものを作りたい、というのがこの記事の趣旨です。
こんな感じの面グラフ(と呼んで良いのだろうか…?)の作り方。
plotするときにwith filledcurves
ってやつを追加します。with lines
みたいな感じで。
このとき上端を表す値と下端を表す値の二つが必要になるので、using 1:2:3
のように三つ使うことに注意です。
実際使ってみるとこんな感じ。
plot "data" using 1:2:3 with filledcurves
usingやらwithやらは勿論省略しても大丈夫です。さらに、この例ではusing 1:2:3
を省略しても大丈夫。
色は通常通りlinecolor rgb "red"
のようにして指定出来ます。楽ちん。
たとえば以下のような感じでやると、サイン波とコサイン波の間を塗ったグラフを作ってくれます。
plot "< seq 350 | awk '{ print $1/100, sin($1/100), cos($1/100) }'" u 1:2:3 w filledcurves
ちょっとややこしいですが、ダブルクォートの中身はただのシェルスクリプトです。 出力は以下のような感じ。
手軽に良い感じのグラフが出来るのが良いですよね、gnuplot。
おまけ。最初に掲載したグラフのスクリプト。
plot 'dat' u 1:3:4 w filledcurves lc rgb 'gray' t '', '' u 1:2 w l lc rgb 'red' t ''