実験結果等を示す際に、複数の物理量を横軸をそろえてプロットするのが非常に効果的な場合がよくあります。例えば、幾つかの物理量の温度依存性を縦に並べてプロットすると、物理量の変化の関連性が明確になります。ここではそのようなグラフの作り方を説明しましょう。
ここで目指すのは、以下のようなグラフです。縦に複数の物理量を並べることで、どの物理量にも共通して50ケルビン付近以下で大きな変化があることが明快に分かるようなグラフになっていると思います。また、(a)の電気抵抗がゼロになった付近で(b)の交流磁化率の変化が鈍化しているなど、変化の関連性も読みとれます。
ここではdata1.dat
、data2.dat
、data3.dat
という3つのファイルに入っているデータをプロットしています。これらのデータファイルをまとめたものはこちらからダウンロードできます。
上図のグラフは以下のスクリプトで作成できます。
## まずはデータを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
EPS形式にするにはスクリプトを以下のように変更します。ここで重要なのは、terminal
をpostscript
に変更した後replot
するだけでは不十分だという点です。なぜなら、replot
は一番最近のplot
コマンドを繰り返すものなので、今の例ではdata3.dat
がプロットされるだけで終わってしまいます。multiplot
全体を繰り返すにはスクリプトファイルを最初から読み込むreread
コマンドを使えばOKです。ただし、何も考えずにreread
を使うと、スクリプトが無限ループに陥ってしまいます。今の例では、無限ループに陥らないようにFRAGという変数が定義されていないときだけ、set out
、set term
、reread
等のコマンドを実行するようにしています。
## 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で図を貼りこむ際の\includegraphics
のwidth
オプションとして、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
これで、以下のように縦に長めのファイルができます。
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にそれぞれ設定しています。この値は適宜変更してください。これによって、以下のように横軸の長さをそろえた図を得ることができます。
次に、軸ラベルやそのほかのラベルなどを追加したり、プロットするポイントのスタイルを変えたりして、グラフの見た目をさらに整えていきます。詳細は論文に使える図を作る 基本編やグラフに文字を書く・矢印の描画と矢印のスタイルの変更などを参考にして下さい。
以下の例ではプロットスタイルをlinespoint
(lp
)に変更し、さらにlinetype
(lt
)を1(実線)に、pointtype
(pt
)を5(塗りつぶしの四角形)に、pointsize
(ps
)を0.5にそれぞれ変更し、プロットの色をlinecolor
(lc
)で赤、青、濃い緑に設定しています。
また、各グラフには1つの物理量しかプロットしていないため、グラフの凡例は無しにし(notitle
)、代わりに各グラフ右上部にlabel
を用いて(a)などのラベルとグラフの物理量の説明とを加えています。また、このラベルと上のグラフがややくっつき過ぎな印象になってしまうため、tmargin
とbmargin
も設定しました。
## 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
これで、レポート等には十分なクオリティーのグラフになったと思います。
まず、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
次に、縦軸の数値ラベルが若干込み入っているので、ytics
とyrange
を調整して数値ラベルを間引きます。また、グラフの数値が読みとりやすくなるように補助スケールを追加(mxtics
とmytics
)します。
注意しなければならないのは、ytics
とyrange
を設定すると次のグラフにも設定が引き継がれてしまう点です。そのため、予期しない出力を防ぐためには、すべてのグラフについてこれらの値を設定するか、もしくは次のプロット前に設定を元に戻す(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で論文に貼りつける場合は、次のセクションも御覧ください。
TeXで図を貼り付ける場合、Bounding Boxを基準として貼り付けが行われるため、Bounding Box内に図が正しくおさまっているかどうかが重要になります。これをチェックするためには、GSviewの場合「Options」→「Show Bounding Box」にチェックを入れます。
するとBounding Boxが点線で表示されます。
この例では左側だけ少し空白が広くなっているようなので、lmargin
を少し少なめに設定しなおします。以下はlmargin
を10から8に減らした場合です。下図ではBounding Box内に変に偏らずに図が描画できています。これで、TeXに貼りこむ際にやりやすくなるはずです。