- not so Frequently Asked Questions - update 2004/8/31
|
|
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 データの組をプロットこの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 入力行が長いときは,\(¥記号,もしくはバックスラッシュ)を行末にい れると,次の行も継続行とみなされます.行が長いときは,キーワード の省略形を使うと便利です.with は wだけ,indexはiだけ,と言う風に 短くして入力できます.どこまで省略できるかはキーワード毎に違うので, 適当に試してみてください.ちなみにファイル名の省略も可能です.一度与えた ファイル名をgnuplotは覚えていますので,上のように"plotexp.dat"が3回も 出て来る場合は,下の2つは "" と略すことができます. 凡例をつける図の凡例が恰好悪いので,各データに表題を付けてみましょう. 最初のデータに,"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 計算値を重ねる関数を重ねてプロットするには,始めに関数を定義しておくのが便利です. 最小自乗法で得られた直線を 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 直線を一番始めにいれたので,データ表示に使われる線種が一つずれ ます. 線種を変えるウィンドウに表示するには,色が変わっている方が見やすいのですが,こ れをPostScriptにして印刷すると,ちょっと困ったことが起こります.直線は 1番の線種で描かれており,PostScriptにすると,1番は実線になります.次の 3つのデータは2,3,4の線種になっており,PostScriptでは点線や破線になりま す.従って,このままでは,誤差棒が点線や破線で描かれてしまいます. これでは困るので,線種は実線のままで記号だけを変えるようにします. それには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 軸名を入れる直線の凡例は,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 表示範囲を調節する今度は,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 目盛を入れる最後に目盛を変えてみます.対数軸であるX軸はこのままで良いでしょう. Y軸のほうは,0.5刻みになっていますが,これを1刻みにし,その間を10等分 しましょう.また,図全体に方眼紙の様な格子を入れてみます.格子は 軸に数字が書かれている部分だけに描かれます. gnuplot> set ytics 1 gnuplot> set mytics 10 gnuplot> set grid gnuplot> replot 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を画面に表示したものです. 縮小しているので見えにくいとは思いますが,7番の記号は●,8番は△, 9番は▲になってます.この様にgnuplotでは,出力ドライバによって,線や記 号の種類が変わります.PostScriptで出力できる記号は非常に沢山ありますが, 実験データのプロットで使えそうなのは,○△□くらいでしょう.これらの番 号の対応は次の様になっています.
|