- not so Frequently Asked Questions - update 2004/8/31
|
|
gnuplot 入門 --- 数値計算編まずはデータファイルの準備計算結果をプロットするためには,結果をファイルに落しておく必要が あります.ファイルは通常のテキストファイルにしておきます.次のような プログラムを作り,その結果をプロットしてみましょう.これは,y=exp(-x)の Pade近似を計算するものです. #include <stdio.h> #include <math.h> int main(void); int main(void) { int i; double x,y,z1,z2,d; d = 0.1; x = 0.0; for(i=0;i<50;i++){ x += d; y = exp(-x); z1 = (6 - 2*x)/(6 + 4*x + x*x); z2 = (6 - 4*x + x*x)/(6 + 2*x); printf("% 6.2f % 11.4e % 11.4e % 11.4e\n", x,y,z1,z2); } return 0; } INTEGER I REAL*8 X,Y,Z1,Z2,D D = 0.1 X = 0.0 DO 10 I=1,50 X = X+D; Y = EXP(-X) Z1 = (6 - 2*X)/(6 + 4*X + X*X) Z2 = (6 - 4*X + X*X)/(6 + 2*X) WRITE(6,20) X,Y,Z1,Z2 10 CONTINUE 20 FORMAT(F6.2,3(1X,1PE11.4)) STOP END このプログラムの出力の最初と最後の部分は,次のようになります.左端 のカラムがX座標,2番目のカラムがEXP(-X)の値,次の2つのカラムがPade近似 による値を表しています.Xの小さい所で近似は良く,Xが大きくなると精度が 悪くなっているのがわかると思います. 0.10 9.0484E-01 9.0484E-01 9.0484E-01 0.20 8.1873E-01 8.1871E-01 8.1875E-01 0.30 7.4082E-01 7.4074E-01 7.4091E-01 0.40 6.7032E-01 6.7010E-01 6.7059E-01 0.50 6.0653E-01 6.0606E-01 6.0714E-01 .... 4.60 1.0052E-02 -7.0237E-02 5.7632E-01 4.70 9.0953E-03 -7.2510E-02 6.0325E-01 4.80 8.2297E-03 -7.4627E-02 6.3077E-01 4.90 7.4466E-03 -7.6597E-02 6.5886E-01 5.00 6.7379E-03 -7.8431E-02 6.8750E-01 (X,Y)の組をプロットこのデータをプロットしましょう.計算結果の出力をファイルに書き出し ます.このファイル名をoutput.datとしておきます.プロットするデータは, X座標1つに対して3カラムあります.まずは,2カラム目(EXP(-X)の値)をプロッ トしましょう. gnuplot> plot "output.dat" using 1:2 with lines 上の図は,説明をしやすい様にウィンドウを少し小さくしています. プロットするカラムは using で指定します.using X:Y の様にコロンの 左がX座標のカラム,右がY座標のカラムになります.with の後に,プロット のスタイルを指定します.linesなら,計算点の間を直線で結びます.プロッ トするときの線の種類が幾つかあり,1から順番に番号が与えられています. with linesの後にその番号を与えることもできます.何もしなければ, gnuplotは同時にプロットする線が増えるたびに1番の線から順番に使っていき ます. プロットのスタイルには,点を打つ,記号を描く,線で結ぶ,階段状の線 で結ぶ,棒グラフを描く,等があります.主なスタイルを以下に挙げます.
同時に複数の線を引く次に,残りの2つのカラムを同時にプロットしてみます.複数の線を同時 に描くにはplotに続けて,描くものを順に指定していきます.gnuplotは,全 部のデータが画面に収まるように軸の値を適当にスケールし,自動的に線種を 変えながらプロットします."output.dat" using X:Y with lines をくりかえ すわけですから,入力行が長くなってしまいます.その場合は,\(¥記号,も しくはバックスラッシュ)を行末にいれると,次の行も継続行とみなされます. gnuplot> plot "output.dat" using 1:2 with lines, \ > "output.dat" using 1:3 with lines,\ > "output.dat" using 1:4 with lines 2番目の緑色の線で描かれている数値がXの大きな所で負になるので,Y軸の 最小値は自動的に-0.1まで延びています. 図の凡例には,プロットしたデータファイル名と使ったカラムが表示されて います.ここを変えてみましょう.まず一番上の赤い線は解析関数の値なので, "Analytical"と書きます.次の緑の線はPade近似のL=1,M=2を使ったものなので, "L=1, M=2" という表題を付けましょう.最後の 青い線は,同じくL=2, M=2のPade近似なので,これを表題にしましょう. 凡例の中身を変えるには,プロットするときにtitleを付けます. gnuplot> plot "output.dat" using 1:2 title "Analytical" with lines, \ > "output.dat" using 1:3 title "L=1, M=2" with lines,\ > "output.dat" using 1:4 title "L=2, M=1" with lines グラフのタイトルと軸名を入れる次にXとY軸の名前を入れます.X軸には "x"を書き,Y軸には"y=exp(-x)" をつけましょう.軸の設定には,set xlabelとset ylabelを使います.また, set titleを使い,図全体の表題として"Pade approximation"というのをいれ ましょう.replotを使うと,プロットしたものと同じものをもう一度プロット し直しますので,先程の長いコマンドをもう一度入力する必要はありません. gnuplot> set xlabel "x" gnuplot> set ylabel "y=exp(-x)" gnuplot> set title "Pade approximation" gnuplot> replot 図の大きさが少し変わったのが分かりますか.gnuplotは全体が枠内(今の 場合ではウィンドウ)に収まる様に,全体を自動的に調整します.軸名や表題 などが入ると,その分図自体は小さくなります. Y軸名の"y=exp(-x)"は,Y軸の横に入らず上に書かれています.これはXウィ ンドウで図をプロットするときに文字を回転できないためです.文字を横にで きるもの(PostScript等)に出力すれば,Y軸名は正しい位置に表示されます.な お,使っているgnuplotがver.3.8より新しいものなら,画面上でも回転されて いるはずです. XYの範囲を変更する今度は,X軸とY軸の範囲を変更します.Y軸の範囲は-0.1から1になっています. この負の部分を切り落としてしまい,Yの範囲を[0,1]にしましょう.Xの範囲は [0,5]ですが,これを[0,2]にしましょう.表示範囲を指定するには,set {x|y}range を使います. gnuplot> set xrange [0:2] gnuplot> set yrange [0:1] gnuplot> replot 軸に目盛をいれるX軸の目盛は0から始まって0.5刻みで増えています.これを1刻みにし,その 間隔に0.2づつ小さな目盛をつけましょう.また,Y軸のほうは,0.5刻みにし, その間を5等分しましょう. 目盛は set {x|y}tics で変えます. set xtics 1 のよう に数字を一つだけ与えると,その数字の間隔で目盛が付き,そこに数字が書かれます. set xtics 0,0.1 の様に2つ与えると最初の数字が初期値, 2番目が増分になります.与えた数字が3つなら,3番目が最終値になります. 小さい目盛は,set m{x|y}tics で,大きい目盛を何分割するかを与えま す.ここでの例なら5分割です.小目盛の所には数字は書かれません. gnuplot> set xtics 1 gnuplot> set mxtics 5 gnuplot> set ytics 0.5 gnuplot> set mytics 5 gnuplot> replot 完成これで完成です.結果をPostScriptにして,印刷してみましょう. まず,出力ドライバをpostscriptにします.次に結果を出力するファイル名を set output で与え,replotします.このままgnuplotを終ってしまうと, いままでの作業が無くなってしまいます.saveを使って適当なファイル(ここでは output.plt という名前)に保存すると,ここまでの 作業内容がファイルに残ります. gnuplot> set term postscript gnuplot> set output "output.ps" gnuplot> replot gnuplot> save "output.plt" gnuplot> quit 出来上がったoutput.psをPostScriptプリンタに送れば,印刷できます. またghostviewやgvを使えば,内容をプレビューできます.下のイメージは, gvでoutput.psを画面に表示したものです. 縮小しているので見えにくいとは思いますが,ウィンドウでは赤い線だっ たものは実線,緑と青が長さの違う破線に変わっています.この様にgnuplot では,出力ドライバによって,線や記号の種類が変わります.どの番号がどの 種類に対応しているのかは,test としてみると分かります.例えばXウィンドウ では,次のようになります. gnuplot> set term x11 gnuplot> test |