Gnuplotの使い方(1) — グラフを作る

学生実験向けのメモです。Gnuplotの基本的な使い方は3年前期の「計算機実験」のハンドブックにあるので、もう一歩進んだ解析に必要なことを少しずつ書いていくことにします。今回は、データ点を誤差付きで表示し、任意の関数でフィットする、という内容について書きます。

まずは、データを用意します。テキストファイルで用意します。

3183. 1910.1 19.8
5486. 3274.7 17.1
5805. 3501.3 21.3

三核種アルファ線源を使ったエネルギー校正の例です。本郷にある三核種アルファ線源は、Gd-148, Am-241, Cm-244で、それぞれ一番強いアルファ線のエネルギーは、3183 keV, 5486 keV, 5805 keVです。これが1列目にあります。それぞれのピークをガウシアンでフィットした結果が2行目、その誤差が3行目です。ファイル名をcalib.txtとして保存することにします。

まずはグラフに表示してみます。

gnuplot> plot 'calib.txt' using 2:1:3 with xerror

ADCの(ch)からエネルギー(keV)という校正をするので、usingの後が2:1:3という順番になっていることに注意してください。誤差は測定したピークの中心値に対する誤差になるので、この場合はXに対する誤差になります(with xerror)。

校正曲線を得るため、一時関数を定義して、初期値を設定し、フィットをします。

gnuplot> f(x) = a*x+b
gnuplot> a=1.0
gnuplot> b=0.01
gnuplot> fit f(x) 'calib.txt' using 2:1:3 via a,b
…
Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 1.65114          +/- 0.0003923    (0.02376%)
b               = 45.7212          +/- 1.173        (2.567%)
…

これで、校正曲線のパラメータ(a,b)が決まりました。校正曲線をグラフに重ねてプロットして、ちゃんとフィットできているかを確認します。

gnuplot> plot 'calib.txt' using 2:1:3 with xerror, f(x)

これではちゃんとフィットできているのか確認するのが難しいので、残差をとることにします。エラーはX方向ですが、線形なので校正曲線で得られた値を使って、Y方向のものにしています。

gnuplot> plot 'calib.txt' using 1:(f($2)-$1):(a*$3) with yerror

これならば、誤差の範囲でちゃんとフィットできていることがわかります。

これでこの解析作業自体は終わりです。このように解析して作った図は、自分の目で見るだけで満足せずに、必ず印刷してログノートに貼るのを忘れないでください。目で見て確認しました、と言っても証拠がないと誰もその解析を信用してくれません(そして残差をとって確認したかは解析報告を聞くときに必ず質問します)。

レポートに(もしくは論文に)図を載せる場合、Gnuplotのそのままの出力をスクリーンショットで保存するのでは不十分です。最低でも軸の名前や単位を忘れずに記入しましょう。Gnuplotはいろいろと設定をいじれば、投稿論文に使えるようなきれいなグラフを作ることも出来ます。フォントの指定や線の太さ、種類の指定等のやり方をいちいち解説はしませんが、参考までに下にソースを載せておきます。

set bmargin 4
set lmargin 5

set xrange [1500:4000]
set yrange [2500:6500]

set xlabel 'MCA Channel [ch]'  font "Times-Roman-bold,24" offset +1
set ylabel 'Alpha energy [keV]'  font "Times-Roman-bold,24" offset +1

set key	left top spacing 1.4

f(x) = a*x+b
a=1.0
b=0.01

fit f(x) 'calib.txt' using 2:1:3 via a,b

set term postscript enhanced monochrome "Times" 16
set output 'output.ps'

set style line 1 lt 1 lw 4 pt 7 ps 1.5 lc "black"
set style line 2 lt 2 lw 2 pt 7 ps 1.5 lc "black"

plot 'calib.txt' using 2:1:3 with xerror title 'Data' ls 1,\
     f(x) title 'Calibration line (linear function)' ls 2

system 'ps2pdf output.ps'