論文に使えるグラフをgnuplotで作る(応用編その3: インセットつきの図を作る)

以下のような、インセットつきの図を作ってみましょう。

Step 0: スタート

まずは、以下のようなグラフからスタートします。

このグラフは以下のようなスクリプトで得ることができます。

# 出力フォーマットとオプションの指定
set terminal postscript eps color enhanced font "Arial,25"
# 出力ファイル名の指定
set output "inset1.eps"


set xlabel "{/=30 {/Arial-Italic T} (K)}"
set ylabel "{/=30 {/Symbol-Oblique r}_{/Arial-Italic c} ({/Symbol mW}cm)}"

plot "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ


# フォーマットと出力のリセット
set output
set terminal win

exit

このグラフは右下が大きく空いていますので、そこに同じデータの50ケルビン付近の拡大図を入れてみましょう。

Step 1: マルチプロットを使ってインセットを入れる

インセット(挿入図)を入れるには、multiplotを使う必要があります。set multiplotを宣言した後に、まずはメインの図をプロットし、次にインセット用のグラフをプロットします。

インセットをプロットする際に、グラフの大きさと位置を変更するためにset sizeset originを使います。これらのコマンドはともに二つの引数を取り、それぞれ縦と横のサイズまたは原点位置を指定します。この際に用いる座標系はscreen座標系、即ち下の図のようにグラフ描画域の左下が(0,0)、右上が(1,1)となるような座標系です。今の場合、大体(0.5,0.3)を原点とし、サイズが(0.35, 0.4)くらいのグラフであれば、メインパネルのグラフにかぶったりせずにインセットを配置できそうです。

では、スクリプトを以下のように変更してみましょう。set origin 0.5, 0.3の部分で、グラフの原点をscreen座標系の(0.5,0.3)に移動し、set size 0.35,0.4で、グラフのサイズを通常の横0.35倍、縦0.4倍にしています。

# 出力フォーマットとオプションの指定
set terminal postscript eps color enhanced font "Arial,25"
# 出力ファイル名の指定
set output "inset2.eps"

set multiplot

set xlabel "{/=30 {/Arial-Italic T} (K)}"
set ylabel "{/=30 {/Symbol-Oblique r}_{/Arial-Italic c} ({/Symbol mW}cm)}"

plot "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ

set size 0.35,0.4
set origin 0.5,0.3

plot [35:60][-0.005:0.03] "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle  #ポイントを線でつなぐ

unset multiplot
reset

# フォーマットと出力のリセット
set output
set terminal win

これでうまくいくはずですが、出力結果はどうでしょうか?

このように、グラフが小さくなってしまって、思ったようにはうまくインセットを入れられませんでした。

この原因は、デフォルト設定ではgnuplotが勝手にグラフの上下左右にマージン(空白)を取ってしまうためです。このように、インセットを入れる場合はデフォルト設定ではやりにくいことが多いです。

そこで、以下のように、マージンを全て0にするようにすると、比較的調整がしやすくなります。

# 出力フォーマットとオプションの指定
set terminal postscript eps color enhanced font "Arial,25"
# 出力ファイル名の指定
set output "inset3.eps"

set multiplot

set xlabel "{/=30 {/Arial-Italic T} (K)}"
set ylabel "{/=30 {/Symbol-Oblique r}_{/Arial-Italic c} ({/Symbol mW}cm)}"

plot "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ

set tmargin 0
set bmargin 0
set lmargin 0
set rmargin 0
set size 0.35,0.4
set origin 0.5,0.3

plot [35:60][-0.005:0.03] "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle  #ポイントを線でつなぐ

unset multiplot
reset

# フォーマットと出力のリセット
set output
set terminal win

exit

出力結果は以下のようになり、確かにグラフの左下が(0.5,0.3)の位置に来ていることが分かると思います。

Step 2: 細かい調整

上の例ではまだインセットのグラフがメインのグラフの一部とかぶっているので、修正が必要です。今の例ではインセットの縦軸と横軸は、メイングラフの縦軸・横軸とそれぞれ共通ですので、xlabelylabelは実は必要ありません。そこで、以下のように取ってしまいます。

# 出力フォーマットとオプションの指定
set terminal postscript eps color enhanced font "Arial,25"
# 出力ファイル名の指定
set output "inset4.eps"

set multiplot

set xlabel "{/=30 {/Arial-Italic T} (K)}"
set ylabel "{/=30 {/Symbol-Oblique r}_{/Arial-Italic c} ({/Symbol mW}cm)}"

plot "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ

set tmargin 0
set bmargin 0
set lmargin 0
set rmargin 0
set size 0.35,0.4
set origin 0.5,0.3
unset xlabel
unset ylabel

plot [35:60][-0.005:0.03] "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle  #ポイントを線でつなぐ

unset multiplot
reset

# フォーマットと出力のリセット
set output
set terminal win

exit

出力結果は以下のようになり、これでだいぶすっきりしました。

最後に、細かいですが、インセットの縦軸が少し込み入っているので、set yticsset yrangeを用いて、調整します。また、必要に応じて適当にラベルや矢印を加えます。

# 出力フォーマットとオプションの指定
set terminal postscript eps color enhanced font "Arial,25"
# 出力ファイル名の指定
set output "inset5.eps"

set multiplot

set xlabel "{/=30 {/Arial-Italic T} (K)}"
set ylabel "{/=30 {/Symbol-Oblique r}_{/Arial-Italic c} ({/Symbol mW}cm)}"

set label 1 at graph 0.99,1.04 right "YBa_2Cu_3O_{7-y}"

Tc = 48
set arrow 1 from first Tc,0.026 to Tc,0.021 lw 2 filled size screen 0.01,20,90
set label 2 at first Tc,0.0275 right "{/Arial-Italic T}_c" center

plot "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ

unset label 1

set size 0.35,0.4
set origin 0.5,0.3
set tmargin 0
set bmargin 0
set rmargin 0
set lmargin 0
unset xlabel
unset ylabel
set ytics 0.01
set yrange [-0.001:0.03]

set arrow 1 from first Tc,0.020 to Tc,0.015 lw 2 filled size screen 0.01,20,90
set label 2 at first Tc,0.023 right "{/Arial-Italic T}_c" center

plot [35:60] "data1.dat" with linespoints pt 7 lc rgb "dark-blue" notitle # ポイントを線でつなぐ

unset multiplot
reset

# フォーマットと出力のリセット
set output
set terminal win

exit

出力結果は以下のようになり、論文に出しても問題が無い程度の図にはすることができました。