Blanktar

  1. top
  2. blog
  3. 2015
  4. 11

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 ''

参考: Ubuntu/gnuplot - DebugIto's