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