物理情報処理基礎実習II 第14回

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を使わないこと!!
(数十枚とか謎の文字列が印刷される
ぞ!!!)
おまけ
半年間、お疲れ様でした。
授業のページは、
参照出来るように、来年度も残す予定です。