gnuplotで複数の図を載せたい時はmultiplotを使います。
うまくmultiplotを使いこなすポイントは、
・1つ1つの図の上下左右の絶対位置を指定する
・eps画像のサイズを決定する
・トライ&エラー
です。
multiplotとは
multiplotとは、その名の通り複数の図を同時にgnuplot上で表示させることです。
これを使うと、図同士の比較が出来たり、insetを入れることが出来るようになります。
さて、gnuplotには標準で横2行×縦3列など決まったレイアウトのmultiplotが出来る
というコマンドが存在しますが、ここではlayoutは使いません。
なぜなら、グラフの細かい調整が出来ないからです。例えば、2つの図でx軸を共有させたい場合がありますがこれはlayoutを使うと出来ません。なので、これに頼らない方法を紹介します。
2枚の図を同時に表示させたいとします。
この時、2枚の図の位置を、
set lmargin screen 0.3
set rmargin screen 0.9
set tmargin screen 0.9
set bmargin screen 0.7
のように指定します。lmarginなどは↓の図位置の長さを指定しています。
座標は絶対位置で、左下を座標(x,y)=(0,0)にとり、右上を(x,y)=(1,1)として考えます。
座標(1,1)は出力形式で設定したサイズを表しています。
例えば、サイズを横3インチ、縦5インチに設定した場合、座標(0.5,0.5)は横1.5インチ、縦2.5インチの座標を表しています。
これは重要なことです。
今、完成した画像を完全な正方形のグラフにしたいとします。
この時、座標を縦横0.5のサイズを持つようにとったとしても、出力形式のサイズが正方形でない限り完成した図が正方形になることはないことを意味しています。
x軸を共有したい場合
x軸を共有したい場合、
1枚目の画像(青線)のbmargin
と
2枚目の画像(緑線)のtmargin
を一致させ、lmarginとrmarginを一致させると良いでしょう。
この場合↓の図のように考えます。
実例がこちら。
コードの中身はこんな感じ。
reset
set isosamples 100
#set terminal postscript size 4,4 eps enhanced color "Roman" 16
#set output "multi2.eps"
set multiplot
set lmargin screen 0.1
set rmargin screen 0.8
set tmargin screen 0.9
set bmargin screen 0.7
set xr[0:10]
set format x
plot sin(x)
set lmargin screen 0.1
set rmargin screen 0.8
set tmargin screen 0.7
set bmargin screen 0.5
set xr[0:10]
set format x
plot cos(x)
set lmargin screen 0.1
set rmargin screen 0.8
set tmargin screen 0.4
set bmargin screen 0.1
set pm3d map
splot sin(x)*cos(y)
unset multiplot
#set out
#set terminal wxt enhanced
清書
上の図を少し綺麗にしてみました。
書式やticsは引き継がれるので、各々のplotの前にできる限り記述をしたほうが良いでしょう。
縦軸と横軸を共通に
縦軸と横軸を共通にしたい場合はこんな感じにとれば良いです。
実例
コードの中身はこんな感じ。
reset
set palette defined ( 0 '#000090',\
1 '#000fff',\
2 '#0090ff',\
3 '#0fffee',\
4 '#90ff70',\
5 '#ffee00',\
6 '#ff7000',\
7 '#ee0000',\
8 '#7f0000')
#set terminal postscript size 4,4 eps enhanced color "Roman" 16
#set output "multi4.eps"
set multiplot
unset key
set lmargin screen 0.3
set rmargin screen 0.9
set tmargin screen 0.9
set bmargin screen 0.7
set xr[-5:5]
set yr[0:1]
set xtics 2.5
set ytics 0.5
set format x ""
set format y "%2.1f"
plot "xdata.d" w l
set lmargin screen 0.1
set rmargin screen 0.3
set tmargin screen 0.7
set bmargin screen 0.1
set xr[0:1] reverse
set yr[-5:5]
set format x
set xtics 0.5 rotate by 90 offset 0,-1.3 format "%2.1f"
set ytics 2.5 rotate by 90 offset -1, 0.5 format "%2.1f"
plot "ydata.d" u 2:1 w l
set lmargin screen 0.3
set rmargin screen 0.9
set tmargin screen 0.7
set bmargin screen 0.1
set pm3d map
set xr[-5:5] noreverse
set yr[-5:5]
set format x ""
set format y ""
set ytics 2
set cbtics 0.2
set format cb "%2.1f"
splot "xydata.d"
unset multiplot
#set out
#set terminal wxt enhanced
insetを入れる
注意する点は、2番目のグラフが1番目のグラフの上に来る、ということです。
また、insetは背景を白くするために白色のオブジェクト
set object 1 rect behind from screen 0.3,0.2 to screen 0.6,0.5 fc rgb "#ffffff" fillstyle solid 1.0
を入れています。デフォルトでは透過してしまうためです。
reset
#set terminal postscript size 4,4 eps enhanced color "Roman" 16
#set output "multi5.eps"
set multiplot
set samples 10000
set lmargin screen 0.1
set rmargin screen 0.9
set tmargin screen 0.7
set bmargin screen 0.1
set xr[0:5]
set format x "%2.1f"
set format y "%2.1f"
set ytics 0.5
plot x*sin(1e0/x)
set object 1 rect behind from screen 0.3,0.2 to screen 0.6,0.5 fc rgb "#ffffff" fillstyle solid 1.0
unset key
set lmargin screen 0.3
set bmargin screen 0.2
set rmargin screen 0.6
set tmargin screen 0.5
set key left top
set xr[0:0.1]
set yr[-0.1:0.1]
set format x "%2.2f"
set format y "%2.2f"
set xtics 0.05
set ytics 0.05
plot x*sin(1e0/x) notitle, x
unset multiplot
#set out
#set terminal wxt enhanced
Note
アイキャッチのフォントは “Commune-Round”を用いています。 http://www.gebsite.org/