Gnuplot で複数のグラフを並べる方法
バンド図
なんかを描く際に、
いくつかのグラフを横に並べて描画したくなる。
あるいは数種類の量を比較するなら、縦に並べたくなるだろう。
そういう時には Gnuplotのコマンド
set multiplot
を使用して複数枚のグラフを並べれば良いのだが、
いくつかハマりどころがある。
# set size と set origin でグラフの位置を調整する # 余白は全て0にする (こうしないとグラフサイズが意図せず変更される) set lmargin 0 set rmargin 0 set tmargin 0 set bmargin 0 # multiplotする前に yrangeを指定 set yrange [0:4] set multiplot # 左のグラフ set title "直線" set size 0.2 , 0.8 set origin 0.1 , 0.1 set xrange [0:1] set xtics ('0' 0, '0.5' 0.5, '1' 1) set ytics ('0' 0, '1' 1,'2' 2,'3' 3,'4' 4) plot x # 右のグラフ set title "放物線" set size 0.6 , 0.8 set origin 0.3 , 0.1 set xrange [1:4] set xtics ('1' 1,'2' 2,'3' 3,'4' 4) set ytics ('' 0,'' 1,'' 2,'' 3,'' 4) plot (x-2)**2 set nomultiplot pause -1
注意点まとめ
- マージンは全て0に設定する
- グラフの位置は
size
とorigin
で指定する xrange
,yrange
の指定を省略しない- 一番左のグラフで
ytics
を設定する
注意点1 マージンを0に設定
たとえば set lmargin 10
とした場合、
グラフのサイズが予期せず変更される。
左右のグラフ共に set size 0.5 , 1
と設定しているにもかかわらず、
左のグラフが右のグラフより横長になるといった怪現象が発生するので、マージンは常に0にしよう。
注意点2 size と origin で位置指定
以下の図では、外側の黒枠が画像の端を表しており、 内側の黒線が左右のグラフを表している。 横方向の数字(赤色)と縦方向の数字(青色)は、 画像の端から端まで距離との比を表していて、距離そのものではない。 つまり赤の0.1と青の0.1は異なる長さなので注意。 緑の玉は各グラフの原点 (origin) を表している。
二枚のグラフがくっつくようにサイズと原点を設定する。
# 左のグラフ set size 0.2 , 0.8 set origin 0.1 , 0.1
# 右のグラフ set size 0.6 , 0.8 set origin 0.3 , 0.1
注意点3 range を設定する
全てのグラフについて設定するのを忘れないようにする。
特に set yrange
を忘れがち。
これを省略すると、例えば
- 左のグラフの上端が y=0 下端が y=1
- 右のグラフの上端が y=0 下端が y=4
といった不条理が発生する。
注意点4 左のグラフで set ytics する
こうしないと図の真ん中に y軸のメモリ数字が出てきて気持ち悪い。
参考サイト : 2次元プロットのあれこれ (その6) ..... このサイトではグラフの位置調整に margin
を使ってるけど、使わない方がいいと思う。