gnuplot / intro / plotexp

gnuplot 入門 — 実験データ編

まずはデータファイルの準備

ファイルに書かれた実験データをプロットし,そこに解析解を重ねて表示
してみましょう.実験データは3つのセットがあり,ひとつのファイルに続け
て書かれています.各データのブロックの間には2行の空行をいれてあります.
データ点は,X座標(エネルギー),Y座標(測定値),Yの誤差の3つの組で与えら
れています.誤差は絶対値で与えます(つまり測定値と同じ単位を持っている
ということ).#で始まる行は無視されます.

 # Data No. 1 2.1500E-02 1.3060E+00 5.3098E-02 2.3900E-02 1.2220E+00 4.7043E-02 2.6800E-02 1.3430E+00 4.9854E-02 2.9700E-02 1.2580E+00 4.5860E-02 3.2500E-02 1.2430E+00 4.4506E-02 .... 9.4500E-01 1.2290E+00 3.7317E-02 1.0350E+00 1.2630E+00 4.1449E-02 1.1330E+00 1.2670E+00 4.2289E-02   # Data No. 2 2.4000E-02 1.2970E+00 3.1387E-02 4.0000E-02 1.3060E+00 2.8993E-02 6.0000E-02 1.2960E+00 2.8382E-02 8.0000E-02 1.3300E+00 2.8728E-02 .... 7.0000E+00 1.2210E+00 2.5031E-02 7.2000E+00 1.1990E+00 2.5299E-02 7.4000E+00 1.1860E+00 2.5618E-02   # Data No.3 2.2500E-02 1.3310E+00 3.4606E-02 2.7500E-02 1.3370E+00 2.4066E-02 3.5000E-02 1.3440E+00 2.6880E-02 .... 1.8936E+01 1.0080E+00 2.9232E-02 2.0064E+01 9.6300E-01 2.9853E-02 2.1296E+01 1.0310E+00 3.1961E-02 
up

データの組をプロット

この3組のデータを最小自乗法で直線近似すると,y = -0.01687 x +
1.3512 となります.実験データとこの式による計算値を重ねてプロットしま
しょう.実験データの入ったファイルを plotexp.dat
としておきます.一つのファイルに書かれた3つの実験データのブロック
は,indexを使ってばらばらにアクセスすることができます.
index 0:0 もしくはindex 0なら一番最初のデータ,
index 2:2もしくはindex 2 なら3番目のデータです.
index 0:1とすると,1と2のデータを合わせたものになります.

誤差付きのデータをプロットするには,with yerrorbarsを使います.
誤差の値が必要なので,データファイルは3カラムあり,using
1:2:3
としてその3つを読み込みます.誤差の数値が%で与えられている
場合は,using 1:2:($2*$3/100.0) とすれば絶対値に変換できます.

 gnuplot> plot "plotexp.dat" index 0:0 using 1:2:3 with yerrorbars, > "plotexp.dat" index 1:1 using 1:2:3 with yerrorbars, > "plotexp.dat" index 2:2 using 1:2:3 with yerrorbars 
plotexp1

入力行が長いときは,(¥記号,もしくはバックスラッシュ)を行末にい
れると,次の行も継続行とみなされます.行が長いときは,キーワード
の省略形を使うと便利です.with は wだけ,indexはiだけ,と言う風に
短くして入力できます.どこまで省略できるかはキーワード毎に違うので,
適当に試してみてください.ちなみにファイル名の省略も可能です.一度与えた
ファイル名をgnuplotは覚えていますので,上のように”plotexp.dat”が3回も
出て来る場合は,下の2つは “” と略すことができます.

up

凡例をつける

図の凡例が恰好悪いので,各データに表題を付けてみましょう.
最初のデータに,”A. Smith (1992)”, 次のものを “B. Smith (1993)”,
そして最後のを “C. Smith (1999)”とします.

 gnuplot> plot "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr, > "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr, > "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr 
plotexp2
up

計算値を重ねる

関数を重ねてプロットするには,始めに関数を定義しておくのが便利です.
最小自乗法で得られた直線を f(x) = -0.01687*x +1.3512 で与えておき,それを
プロットしましょう.

 gnuplot> f(x)= -0.01687*x + 1.3512 gnuplot> plot f(x) with lines,  > "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr, > "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr, > "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr 
plotexp3

直線を一番始めにいれたので,データ表示に使われる線種が一つずれ
ます.

up

線種を変える

ウィンドウに表示するには,色が変わっている方が見やすいのですが,こ
れをPostScriptにして印刷すると,ちょっと困ったことが起こります.直線は
1番の線種で描かれており,PostScriptにすると,1番は実線になります.次の
3つのデータは2,3,4の線種になっており,PostScriptでは点線や破線になりま
す.従って,このままでは,誤差棒が点線や破線で描かれてしまいます.

errorbar

これでは困るので,線種は実線のままで記号だけを変えるようにします.
それにはlinestyleを定義します(ver.3.7以前).

 gnuplot> set linestyle 1 lt 1 lw 3 gnuplot> set linestyle 2 lt 1 pt 7 gnuplot> set linestyle 3 lt 1 pt 8 gnuplot> set linestyle 4 lt 1 pt 9 

[3.8/4.0] Ver.3.8以降のgnuplotの場合は,以下のように指定します.

 gnuplot> set style line 1 lt 1 lw 3 gnuplot> set style line 2 lt 1 pt 7 gnuplot> set style line 3 lt 1 pt 8 gnuplot> set style line 4 lt 1 pt 9 

linestyleの1番として,線幅を3の実線を定義してます.次の2〜4では線
種としては1番の実線を使い,記号(ポイント)に7,8,9を割り当てています.こ
れらを使ってプロットするには,withのstyleの後にlinestyleを書き,その後
に使う番号を与えます.

 gnuplot> f(x)= -0.01687*x + 1.3512 gnuplot> plot f(x) notitle with lines linestyle 1,  > "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr linestyle 2, > "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr linestyle 3, > "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr linestyle 4 
plotexp4
up

軸名を入れる

直線の凡例は,notitleを使って消してしまいました.データ表示に関す
る部分は,ここまででほぼ終りです.ウィンドウ表示の場合は,全部赤色になっ
てしまい見づらいですが,印刷するまでの辛抱です.後は,図のミテクレを変
えていくだけです.

図にXとY軸の名前を入れます.X軸は “Energy [MeV]” としましょう.ま
たY軸には “Cross Section [b]” と入れてみましょう.軸の設定には,set
xlabelとset ylabelを使います.replotを使うと,プロットしたものと同じも
のをもう一度プロットし直しますので,先程の長いコマンドをもう一度入力す
る必要はありません.

 gnuplot> set xlabel "Energy [MeV]" gnuplot> set ylabel "Cross Section [b]" gnuplot> replot 
plotexp5
up

表示範囲を調節する

今度は,X軸とY軸の範囲を変更します.Y軸の範囲を[0,2]にしましょう.
Xの範囲は,これで全体がきれいに収まっていますが,0付近がかなりごちゃごちゃ
しています.Xを対数にして,ここを拡大し,Xの最小値を0.01,最大値を20としましょう.
対数表示を指定するには,set logscale {x|y}を使います.

 gnuplot> set xrange [0.01:20] gnuplot> set yrange [0:2] gnuplot> set logscale x gnuplot> replot 
plotexp6
up

目盛を入れる

最後に目盛を変えてみます.対数軸であるX軸はこのままで良いでしょう.
Y軸のほうは,0.5刻みになっていますが,これを1刻みにし,その間を10等分
しましょう.また,図全体に方眼紙の様な格子を入れてみます.格子は
軸に数字が書かれている部分だけに描かれます.

 gnuplot> set ytics 1 gnuplot> set mytics 10 gnuplot> set grid gnuplot> replot 
plotexp7
up

Postscriptで出力する

これで完成です.結果をPostScriptにして,印刷してみましょう.
まず,出力ドライバをpostscriptにします.次に結果を出力するファイル名を
set output で与え,replotします.このままgnuplotを終ってしまうと,
いままでの作業が無くなってしまいます.saveを使うと,ここまでの
作業内容がファイルに保存されます.

 gnuplot> set term postscript gnuplot> set output "plotexp.ps" gnuplot> replot gnuplot> save "plotexp.plt" gnuplot> quit 

出来上がったoutput.psをPostScriptプリンタに送れば,印刷できます.
またghostviewやgvを使えば,内容をプレビューできます.下のイメージは,
gvでoutput.psを画面に表示したものです.

plotexp8

縮小しているので見えにくいとは思いますが,7番の記号は●,8番は△,
9番は▲になってます.この様にgnuplotでは,出力ドライバによって,線や記
号の種類が変わります.PostScriptで出力できる記号は非常に沢山ありますが,
実験データのプロットで使えそうなのは,○△□くらいでしょう.これらの番
号の対応は次の様になっています.

1 2 3 4 5 6 7 8 9 10 11 12 13
×
up