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

実験結果等を示す際に、複数の物理量を横軸をそろえてプロットするのが非常に効果的な場合がよくあります。例えば、幾つかの物理量の温度依存性を縦に並べてプロットすると、物理量の変化の関連性が明確になります。ここではそのようなグラフの作り方を説明しましょう。

ここで目指すのは、以下のようなグラフです。縦に複数の物理量を並べることで、どの物理量にも共通して50ケルビン付近以下で大きな変化があることが明快に分かるようなグラフになっていると思います。また、(a)の電気抵抗がゼロになった付近で(b)の交流磁化率の変化が鈍化しているなど、変化の関連性も読みとれます。

ここではdata1.datdata2.datdata3.datという3つのファイルに入っているデータをプロットしています。これらのデータファイルをまとめたものはこちらからダウンロードできます。

Step 0: まずはデータをmultiplotしてみる

上図のグラフは以下のスクリプトで作成できます。

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

plot "data1.dat" using 1:2 title "Resistance"

plot "data2.dat" using 1:2 title "AC susceptibility (Real Part)"

plot "data3.dat" using 1:2 title "AC susceptibility (Imaginary Part)"

unset multiplot

Step 1: EPSフォーマットで図を作る

EPS形式にするにはスクリプトを以下のように変更します。ここで重要なのは、terminalpostscriptに変更した後replotするだけでは不十分だという点です。なぜなら、replotは一番最近のplotコマンドを繰り返すものなので、今の例ではdata3.datがプロットされるだけで終わってしまいます。multiplot全体を繰り返すにはスクリプトファイルを最初から読み込むrereadコマンドを使えばOKです。ただし、何も考えずにrereadを使うと、スクリプトが無限ループに陥ってしまいます。今の例では、無限ループに陥らないようにFRAGという変数が定義されていないときだけ、set outset termreread等のコマンドを実行するようにしています。

## Step1: EPS形式で出力する

set multiplot layout 3,1

plot "data1.dat" using 1:2 title "Resistance"

plot "data2.dat" using 1:2 title "AC susceptibility (Real Part)"

plot "data3.dat" using 1:2 title "AC susceptibility (Imaginary Part)"

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";\
     FRAG = 1; reread

undefine FRAG
set out
set term pop

このスクリプトを実行すると、以下のようなEPSファイルmultiplot.epsが生成されます。

デフォルトではEPSファイルは5インチ×3.5インチのものができますが、グラフを縦に並べる場合は縦に大きいサイズの方がベターです。EPSファイルのサイズはset termにオプションsize XX,YYを追加することで変更できます。以下の例では5インチ×6インチに変更しています。

なお、サイズに関してですが、TeXで図を貼りこむ場合は図の横サイズはある程度統一しておいた方がいいと思います。これは、完成した論文で図の文字サイズがまちまちになるという見苦しい状況を防ぐためです。筆者はEPSファイルのサイズは横5インチのもの(2段組み用)と横10インチ(1段組み用)のものの2通りに基本的には統一しています。そして、TeXで図を貼りこむ際の\includegraphicswidthオプションとして、1段組み用EPSファイルには2段組み用のものの2倍(例えば1段組みの場合は15cm・2段組み用7.5cm)に指定すれば、完成原稿には1段組み用・2段組み用どちらも同じフォントサイズで表示されるようになります。

## Step1: EPS形式で出力する

datfile = "data_multi.dat"

set multiplot layout 3,1

plot "data1.dat" using 1:2 title "Resistance"

plot "data2.dat" using 1:2 title "AC susceptibility (Real Part)"

plot "data3.dat" using 1:2 title "AC susceptibility (Imaginary Part)"

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: 各グラフのサイズをそろえる

gnuplotの初期設定ではグラフの横軸・縦軸の長さは自動設定されますが、今の場合の例のように横軸の長さがそろわない場合があります。したがって、左右マージンを明示的に設定してやる必要があります。

## Step2: 各グラフのサイズをそろえる
set multiplot layout 3,1

set lmargin 10  # 左マージン
set rmargin 2   # 右マージン

plot "data1.dat" using 1:2 title "Resistance"

plot "data2.dat" using 1:2 title "AC susceptibility (Real Part)"

plot "data3.dat" using 1:2 title "AC susceptibility (Imaginary Part)"

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

上のスクリプトでは、lmarginを10に、rmarginを2にそれぞれ設定しています。この値は適宜変更してください。これによって、以下のように横軸の長さをそろえた図を得ることができます。

Step 3: ラベル等の追加・プロットスタイルの変更

次に、軸ラベルやそのほかのラベルなどを追加したり、プロットするポイントのスタイルを変えたりして、グラフの見た目をさらに整えていきます。詳細は論文に使える図を作る 基本編グラフに文字を書く矢印の描画と矢印のスタイルの変更などを参考にして下さい。

以下の例ではプロットスタイルをlinespointlp)に変更し、さらにlinetypelt)を1(実線)に、pointtypept)を5(塗りつぶしの四角形)に、pointsizeps)を0.5にそれぞれ変更し、プロットの色をlinecolorlc)で赤、青、濃い緑に設定しています。

また、各グラフには1つの物理量しかプロットしていないため、グラフの凡例は無しにし(notitle)、代わりに各グラフ右上部にlabelを用いて(a)などのラベルとグラフの物理量の説明とを加えています。また、このラベルと上のグラフがややくっつき過ぎな印象になってしまうため、tmarginbmarginも設定しました。

## Step3: ラベル等の追加・プロットスタイルの変更

set multiplot layout 3,1

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


set xlabel "{/=30 {/Arial-Italic T} (K)}"

set label 1 "{(a) Resistance}" at graph 0,1.1 left 
set ylabel "{/=30 {/Arial-Italic R} ({/Symbol W})}"
plot "data1.dat" using 1:2 w lp lt 1 pt 5 ps 0.5 lc rgb "red" notitle

set label 1 "{(b) AC susceptibility (real part)}"
set ylabel "{/=30 {/Symbol-Oblique c}' (V)}"
plot "data2.dat" using 1:2 w lp lt 1 pt 5 ps 0.5 lc rgb "blue" notitle

set label 1 "{(c) AC susceptibility (imaginary part)}"
set ylabel "{/=30 {/Symbol-Oblique c}'' (V)}"
plot "data3.dat" using 1:2 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 4: さらなる作りこみ

まず、2個目と3個目のグラフの数値が指数表示になっていて見苦しいので、全数値を100万倍して、マイクロボルト単位でプロットするようにします。ついでに最初のグラフも1000倍してミリオーム単位にしてしまいます。

## Step4: さらなる作りこみ

set multiplot layout 3,1

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

set xlabel "{/=30 {/Arial-Italic T} (K)}"

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

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

set label 1 "{(c) AC susceptibility (imaginary part)}"
set ylabel "{/=30 {/Symbol-Oblique c}'' ({/Symbol m}V)}"
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

次に、縦軸の数値ラベルが若干込み入っているので、yticsyrangeを調整して数値ラベルを間引きます。また、グラフの数値が読みとりやすくなるように補助スケールを追加(mxticsmytics)します。

注意しなければならないのは、yticsyrangeを設定すると次のグラフにも設定が引き継がれてしまう点です。そのため、予期しない出力を防ぐためには、すべてのグラフについてこれらの値を設定するか、もしくは次のプロット前に設定を元に戻す(set autoscale yおよびset ytics)必要があります。

## Step4: さらなる作りこみ 

set multiplot layout 3,1

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

set xlabel "{/=30 {/Arial-Italic T} (K)}"
set mxtics 5

set label 1 "{(a) Resistance}" at graph 0,1.1 left 
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

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

set label 1 "{(c) AC susceptibility (imaginary part)}"
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

これで、論文に載ってもおかしくないくらいのグラフになったと思います。このほか、必要に応じてxticsをいじったり、ラベルや矢印を追加したりしてみて下さい。

プレゼン等に使うだけでしたら、ここまでで充分です。TeXで論文に貼りつける場合は、次のセクションも御覧ください。

Step 5: Bounding Boxのチェック

TeXで図を貼り付ける場合、Bounding Boxを基準として貼り付けが行われるため、Bounding Box内に図が正しくおさまっているかどうかが重要になります。これをチェックするためには、GSviewの場合「Options」→「Show Bounding Box」にチェックを入れます。

するとBounding Boxが点線で表示されます。

この例では左側だけ少し空白が広くなっているようなので、lmarginを少し少なめに設定しなおします。以下はlmarginを10から8に減らした場合です。下図ではBounding Box内に変に偏らずに図が描画できています。これで、TeXに貼りこむ際にやりやすくなるはずです。