論文に使えるグラフを作る(応用編その2:複数の物理量を縦に並べてプロットする [Part 2])

その1で作った図は、そこそこ見栄えのするグラフです。しかし、実際の論文ではスペースが限られている場合が多いにもかかわらず、その1のグラフでは横軸のラベルや数値が大きなスペースをとってしまっています。グラフの横軸は共通ですので、横軸ラベルや数値は一番下のグラフにさえついていれば十分です。ここではその1のスクリプトにさらに手を加えて下のようなグラフを作ってみましょう。

Step 1: 一番下のグラフにのみ横軸ラベルや数値をつける

その一の最後のスクリプトにxlabelをつけたり消したりする命令、さらに横軸の数値をつけたり消したりする命令を付け加えます。前者はset xlabelまたはunset xlabel、後者はset format xおよびset format x ""です。

## まずはデータをmultiplotしてみる
set multiplot layout 3,1

set lmargin 8
set rmargin 2
set tmargin 1.5
set bmargin 3.5

set mxtics 5

## Plot 1 ##
set label 1 "{(a) Resistance}" at graph 0,1.1 left
unset xlabel
set format x ""
set ylabel "{/=30 {/Arial-Italic R} (m{/Symbol W})}"
set yrange [-2:30]
set ytics 10
set mytics 2
plot "data1.dat" using 1:($2*1e3) w lp lt 1 pt 5 ps 0.5 lc rgb "red" notitle

## Plot 2 ##
set label 1 "{(b) AC susceptibility (real part)}"
set ylabel "{/=30 {/Symbol-Oblique c}' ({/Symbol m}V)}"
set yrange [-50:0]
set ytics 10
set mytics 2
plot "data2.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "blue" notitle

## Plot 3 ##
set label 1 "{(c) AC susceptibility (imaginary part)}"
set xlabel "{/=30 {/Arial-Italic T} (K)}"
set format x
set ylabel "{/=30 {/Symbol-Oblique c}'' ({/Symbol m}V)}"
set yrange [0:10]
set ytics 2
set mytics 2
plot "data3.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "dark-green" notitle

unset multiplot


if (exist("FRAG") == 0) \
     pause -1 "Click OK to make EPS file";\
     set out "multiplot.eps";\
     set term post eps color enhanced "Arial,25" size 5in,6in;\
     FRAG = 1; reread

undefine FRAG
set out
set term pop

上の例のように、一つ目のプロットの前にunset xlabelset format x ""という命令を用いてxlabelとx軸の数値を消去しています。すると以下のようなグラフができます。

せっかくできた空白を埋めるためにtmarginbmarginを小さめに設定します。

set tmargin 0.7
set bmargin 0.7

すると以下のように空白が詰まります。

しかし、今度はラベルが窮屈になるので、各ラベルの位置をグラフの内部に変更します。

set label 1 "{(a) Resistance}" at graph 0.02,0.92 left

最後にデータとラベルがかぶらないようにyrangeをちょっとだけいじります。あまりyrangeを変えすぎてデータが見にくくなってしまっては本末転倒ですので注意しましょう。

最終的には以下のスクリプトで、その下にある図のようなグラフが作れました。

set multiplot layout 3,1

set lmargin 8
set rmargin 2
set tmargin 0.7
set bmargin 0.7

set mxtics 5

## Plot 1 ##
set label 1 "{(a) Resistance}" at graph 0.02,0.92 left
unset xlabel
set format x ""
set ylabel "{/=30 {/Arial-Italic R} (m{/Symbol W})}"
set yrange [-2:35]
set ytics 10
set mytics 2
plot "data1.dat" using 1:($2*1e3) w lp lt 1 pt 5 ps 0.5 lc rgb "red" notitle

## Plot 2 ##
set label 1 "{(b) AC susceptibility (real part)}"
set ylabel "{/=30 {/Symbol-Oblique c}' ({/Symbol m}V)}"
set yrange [-45:10]
set ytics 10
set mytics 2
plot "data2.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "blue" notitle

## Plot 3 ##
set label 1 "{(c) AC susceptibility (imaginary part)}"
set xlabel "{/=30 {/Arial-Italic T} (K)}"
set format x
set ylabel "{/=30 {/Symbol-Oblique c}'' ({/Symbol m}V)}"
set yrange [0:12]
set ytics 2
set mytics 2
plot "data3.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "dark-green" notitle

unset multiplot


if (exist("FRAG") == 0) \
     pause -1 "Click OK to make EPS file";\
     set out "multiplot.eps";\
     set term post eps color enhanced "Arial,25" size 5in,6in;\
     FRAG = 1; reread

undefine FRAG
set out
set term pop

Step 2: バウンディングボックスを確認する

その1でも述べたように、LaTeXで論文に図を貼りこむ場合はEPSファイルのBounding Boxの大きさが重要になります。上で作った図のBounding Boxを確認してみると、図が下にはみ出してしまっていることが分かります。

これは、グラフの間の余白をなくすためにset bmargin 0.7としたため、一番下のグラフのbmarginに入りきらなかった部分がBounding Boxからもはみ出してしまったのです。しかし、一番下のグラフだけset bmarginの値を変えてしまうと、今度は一番下のグラフだけやや小さくなってしまってよろしくありません。

Bouding Boxの位置をグラフに合わせるのをまじめにやろうとすると、multiplotlayoutオプションを使うのをやめて手でsizeoriginを決める必要があります。これはかなり面倒です。簡便にBounding Boxを調整するには、unset multiplotset term postscriptの間にset sizeおよびset origin命令を追加します。PostScriptターミナルの場合、Bounding Boxはset term postscriptを宣言した時点でのsizeoriginを反映するように設定されます。例えばset term postscriptの前にset size 1,0.5が設定されていれば、Bounding Boxは通常の縦半分の大きさになります。

この性質を用いると、Bounding Boxをグラフに対してずらすことができます。

set multiplot layout 3,1

set lmargin 8
set rmargin 2
set tmargin 0.7
set bmargin 0.7

set mxtics 5

## Plot 1 ##
set label 1 "{(a) Resistance}" at graph 0.02,0.92 left
unset xlabel
set format x ""
set ylabel "{/=30 {/Arial-Italic R} (m{/Symbol W})}"
set yrange [-2:35]
set ytics 10
set mytics 2
plot "data1.dat" using 1:($2*1e3) w lp lt 1 pt 5 ps 0.5 lc rgb "red" notitle

## Plot 2 ##
set label 1 "{(b) AC susceptibility (real part)}"
set ylabel "{/=30 {/Symbol-Oblique c}' ({/Symbol m}V)}"
set yrange [-45:10]
set ytics 10
set mytics 2
plot "data2.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "blue" notitle

## Plot 3 ##
set label 1 "{(c) AC susceptibility (imaginary part)}"
set xlabel "{/=30 {/Arial-Italic T} (K)}"
set format x
set ylabel "{/=30 {/Symbol-Oblique c}'' ({/Symbol m}V)}"
set yrange [0:12]
set ytics 2
set mytics 2
plot "data3.dat" using 1:($2*1e6) w lp lt 1 pt 5 ps 0.5 lc rgb "dark-green" notitle

unset multiplot

set origin 0,-0.1
set size 1,1.1

if (exist("FRAG") == 0) \
     pause -1 "Click OK to make EPS file";\
     set out "multiplot.eps";\
     set term post eps color enhanced "Arial,25" size 5in,6in;\
     FRAG = 1; reread

undefine FRAG
set out
set term pop

上の例ではoriginを下に0.1ずらし、sizeを縦に1.1倍にしています。この方法はあまりほめられた方法ではないのかもしれませんが、簡単に下図のようにBounding Boxがグラフ全体を囲うように変更できます。

ここまでくれば論文に出しても全く遜色のない図であると言えるでしょう。