http://www.phys.ynu.ac.jp/labs/cosmic/shibata/jisshu/ 物理情報処理基礎実習II 第14回 GNUPLOT 柴田 [email protected] 石川 [email protected] (原 [email protected]) §課題12解答例 #include <stdio.h> double triangle(char txt[],double a, #include <math.h> double triangle(char[],double,double,double) ; double b,double c) { double s,A; main() s=(a+b+c)/2.; { A=sqrt(s*(s-a)*(s-b)*(s-c)); printf("%s : a=%6.1lf b=%6.1lf c=%6.1lf --> double A1,A2,A3,A; s=%6.2lf, A=%6.2lf\n",txt,a,b,c,s,A); A1=triangle("ABC",6.,6.,10.); return A; A2=triangle("CDE",7.,7.,10.); A3=triangle("EAC",5.,10.,10.); A=A1+A2+A3; printf("A=%6.2lf\n",A); } } §課題フローチャート -X課題13 座標変換 fopen t読込 (r, θ)計算 座標変換 (x, y)出力 fclose 変数 FILE *fp_input FILE *fp_output double r, theta double x, y (r, θ)→(x, y) 座標変換 (r, theta, *x, *y) *x = r*cos(theta) *y = r*sin(theta) §GNUPLOT これから先、 計算結果などをグラフ表示することが必要。 今回ここでは、UNIXで一般的に使われている GNUPLOTの使い方を学ぶ。 起動 aplsrvky01% gnuplot … gnuplot> ※←これがgnuplot内でのプロンプト 終了 gnuplot> exit ※または quit aplsrvky01% §関数のプロット -I三角関数や指数・対数関数など よく使われる関数はそのまま使用出来る。 2次元プロット 正弦関数をプロットしてみよう。 gnuplot> plot sin(x) ※実行すると、窓が開きグラフが表示される。 変域 (x軸の範囲) 何も指定しなければ、-10 < x < 10 の範囲になる。 0 < x < 2π の範囲を指定してみよう。 gnuplot> plot [0:2*pi] sin(x) ※piはπを表す ※範囲は、[下限値:上限値]と指定する。 値域 (y軸の範囲) 変域に続けて同様に値域を指定出来る。 gnuplot> plot [0:2*pi] [-2:2] sin(x) §関数のプロット -II複数の曲線を同時にプロットする。 gnuplot> plot [0:2*pi] sin(x), cos(x) ※「,」で区切ればよい。 線種・色 描かれるプロット点を線で結んだりできる。 gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> plot plot plot plot plot [0:2*pi] [0:2*pi] [0:2*pi] [0:2*pi] [0:2*pi] sin(x) sin(x) sin(x) sin(x) sin(x) with with with with with lines points linespoints lines 1 lines 2 ユーザ定義関数 自分で定義した関数も使うことが出来る。 gnuplot> f(x) = x*sin(x) gnuplot> plot [0:pi] f(x) §データ点のプロット (x, y)の組をファイルとして用意すれば、 それを読み込んでプロットすることが出来る。 ※ftp pub/jisshu/primer/kadai14xy.txt aplsrvky01% cat kadai14xy.txt 0.000000 -0.103535 0.100000 0.350469 0.200000 -0.106930 … gnuplot> plot “kadai14xy.txt” 他のデータや関数と同時にプロットすることも可能。 gnuplot> f(x) = x*sin(x) gnuplot> replot f(x) ※replotは書き加えるコマンド(“replot”だけで再描画) 課題13の kadai13xy.txt を読み込んでみよう。 §グラフの修飾 -Iタイトルを入れる gnuplot> set title “0545000 Chibutsu Taro” ※レポートに使うグラフには学籍番号・名前を入れよう 軸にラベルを付ける gnuplot> set xlabel “Time [sec]” gnuplot> set ylabel “Velocity [m/sec]” 軸の範囲指定 gnuplot> set xrange [0:100] gnuplot> set yrange [0:50] §グラフの修飾 -IIプロットラベル gnuplot> plot “kadai13xy.txt” title “label” ※デフォルトでは、 ファイル名や関数名がプロットラベルになる。 ラベルなしにしたい場合 gnuplot> plot “kadai13xy.txt” notitle プロットラベルの位置 右上がデフォルト位置、これを変更する場合 gnuplot> set key left top ※または right bottom、left bottom §グラフの修飾 -III対数グラフ gnuplot> set log y ※片対数グラフ gnuplot> set log xy ※両対数グラフ 軸に表示する数値の書式指定 gnuplot> set format x “%4.1f” ※小数点以下1桁の実数 gnuplot> set format y “%3.0e” ※1e2, 1e3, …等の指数表示 §グラフの修飾 -IV- 実行例 ガウス分布 gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> set terminal postscript 11 set output “gauss.ps“ set title “Gauss distribution 0545000 xxxx” set xlabel “x [m]“ set ylabel “Probability“ set xrange [-6:6] set yrange [0:0.5] set format y “%4.2f” set key left top f(x,sigma)=exp(-x**2/(2*sigma**2))/(sigma*sqrt(2*pi)) plot f(x,1) title ”sigma=1”,f(x,2) title “sigma=2“ set output set terminal x11 !gv gauss.ps ※!を付けてシェルコマンドを実行できる §マクロファイル 同じ(様な)コマンドを繰り返すのは大変! → マクロファイル あらかじめファイルに書いておいて、 それを呼び出してGNUPLOTでの作業ができる! 前ページの内容をそのまま、 例えばgauss.gnuというファイルに書いておく。 シェルから直接実行するには、 aplsrvky01% gnuplot gauss.gnu GNUPLOTを起動してから使う場合は、 gnuplot> load “gauss.gnu” 詳しいGNUPLOTのマニュアル ftp.phys.ynu.ac.jp:/pub/gnuplot §プロット結果の印刷 一度Postscriptファイルに出力することで、 印刷することが可能になる。 Postscriptファイルへの出力方法 gnuplot> set terminal postscript 11 ※11は文字の大きさ gnuplot> set output “test.ps” ※これでファイルtest.psに出力するようになる gnuplot> plot “kadai13xy.txt” ※ファイルに出力しているので画面には何も出ない gnuplot> set output gnuplot> set terminal x11 ※この2行は再び画面出力に戻すコマンド 印刷 aplsrvky01% lpr test.ps ※絶対にa2psを使わないこと!! (数十枚とか謎の文字列が印刷される ぞ!!!) おまけ 半年間、お疲れ様でした。 授業のページは、 参照出来るように、来年度も残す予定です。
© Copyright 2024 ExpyDoc