N.Y.Cityのまちかど

GNUPLOT-MEMO

GNUPLOTに関する覚書

コマンド

演算子

+,-,*,/,%
和、差、積、商、剰余
**
べき乗
$,|,^
(ビットごとの)and,or,ex-or(排他的論理和)
&&,||
(論理的)and,or
==,!=
等しい、等しくない
? :
三項演算子

関数

sin,cos,tan
三角関数

グラフ描画

"plot ~"
1次元グラフの描画
"splot ~"
2次元グラフ・等高線の描画

グラフ表示設定

set [xyz]range [開始値:終了値]
[xyz]軸の値がとる範囲を指定する。
(s)plot [x開始値:x終了値][y開始値:y終了値]([z開始値:z終了値]) ~
としてもよい。
set set [xyz]label ~
[xyz]軸につけるラベルを指定する
unset surface
線をプロットしない(等高線だけを見たいとき用いる)
set view 0,0
視点を真上からに変更する
unset key
凡例を全て非表示にする
plot ~,~~ notitle
notitleが指定されたものだけ凡例が表示されない
set key …
位置指定コマンドを…の部分に入れることで凡例の位置を変更する
コマンド 表示位置
left 左側
right 右側
top 上側
bottom 下側
outside 図の右側の外
below 図の下側の外
[x座標],[Y座標] 直接座標指定

描画精度

set samples ~
2次元プロットの分解能を設定する。
set isosample ~
3次元プロットのメッシュ密度を設定する。標準は10
値が大きいほど細かいメッシュとなる

等高線・カラーマップ

set contour
等高線を表示
set cntrparam levels ~
表示する等高線の本数を指定する
set pm3d
3次元でプロットされたメッシュに色をつけて表示する
set pm3d at b
カラーマップを底面に表示する
set pm3d map
カラーマップのみを表示する
set palette defined (値と色の組み合わせ,値と色の組み合わせ,…)
カラーマップの配色を変更する
値と、それに対応させる色の名前を列挙して設定する
例 set palette defined (0 "blue", 1 "white", 2 "red")
set palette rgbformulae R,G,B
カラーマップの配色を変更する
R,G,Bにはそれぞれの色を変化させる関数の番号を入力する。
例:(標準) set palette rgbformulae 7,5,15
例:(虹色) set palette rgbformulae 22,13,-31

関数一覧

* there are 37 available rgb color mapping formulae:
             0: 0               1: 0.5             2: 1
             3: x               4: x^2             5: x^3
             6: x^4             7: sqrt(x)         8: sqrt(sqrt(x))
             9: sin(90x)       10: cos(90x)       11: |x-0.5|
            12: (2x-1)^2       13: sin(180x)      14: |cos(180x)|
            15: sin(360x)      16: cos(360x)      17: |sin(360x)|
            18: |cos(360x)|    19: |sin(720x)|    20: |cos(720x)|
            21: 3x             22: 3x-1           23: 3x-2
            24: |3x-1|         25: |3x-2|         26: (3x-1)/2
            27: (3x-2)/2       28: |(3x-1)/2|     29: |(3x-2)/2|
            30: x/0.32-0.78125 31: 2*x-0.84       32: 4x;1;-2x+1.84;x/0.08-11.5
            33: |2*x - 0.5|    34: 2*x            35: 2*x - 0.5
            36: 2*x - 1                                                 

作例

2次元正規分布

Twitterで質問されたものを作ってみた。

σx,σy,σxyのそれぞれを0.25と仮定して2次元正規分布をプロットする。

f(x,y) = (1/(2*pi*0.25*sqrt(1-0.5**2)))*exp(-1/(2*(1-0.25))
         *((((x-0.5)**2)/0.25)+(((y-0.5)**2)/0.25)-((2*0.5*(x-0.5)*(y-0.5))/0.25)))
set isosample 50
set contour
set cntrparam levels 10
set yrange[-1:2]
set xrange[-1:2]
splot f(x,y)
2dgauss_1.PNG

等高線だけをプロットする場合は上に続けて

unset surface
set view 0,0
replot
2dgauss_2.PNG

点音源に対するPowerResponse

点音源から距離xだけ離れたところに剛壁があった場合の、点音源表面のPowerレスポンスを示す。 まずは2次元平面版(周波数が50[Hz]で一定)のグラフを描画する。 また、音速を340.29[m/s]として計算している。

p(x) = 1+(sin(2*(50/340.29)*x)/(2*(50/340.29)*x))
set xrange[0:50]
set yrange[0:2]
set xlabel "x[m]"
set ylabel "P/P_0"
plot p(x)

ここで、音速を340.29でなく、340とすると、計算結果が整数に丸められてしまい、うまく計算ができないので注意する。(340.0として実数型の値にすればOK)

powerresp_1.png

次に3次元版(x軸に周波数、y軸に距離、z軸にPowerResponseをプロット)のグラフを描画する。

p(x,y) = 1+(sin(2*(y/340.29)*x)/(2*(y/340.29)*x))
set xrange[0:50]
set yrange[20:500]
set zrange[0:2]
set xlabel "x[m]"
set ylabel "f[Hz]"
set zlabel "P/P_0"
set isosample 50
splot p(x,y)
powerresp_2.png

色つきで表示するには、上に続けて

set pm3d
replot
powerresp_3.png

カラーマップを表示するには

set pm3d at b
replot

カラーマップ「のみ」を表示するには

set pm3d map
replot
powerresp_4.png

カラーマップの色を変更する。値が1(すなわちPowerResponseが音源のパワーと等しい)時白、それよりも強い時赤、弱いとき青が表示されるようにマップする

set palette defined (0 "blue", 1 "white", 2 "red")
replot
powerresp_5.png

関数出力の最低値が0.6のようで、本来1で白になるはずが1.2あたりに白が来てしまっているので、修正する。

set palette defined (0.6 "blue", 1 "white", 2 "red")
replot
powerresp_6.png

GNUPLOT上で直接座標指定して点を打つ

gnuplot> 'plot "-"  
input data ('e' ends) > 1, 2  
input data ('e' ends) > 3, 4  
input data ('e' ends) > 5, 6  
input data ('e' ends) > e  

上記はプロンプトも一緒に示しています。 座表情報のカンマ後ろにあるスペースは必須のようです(?)

参考文献

gnuplot tips
gnuplotに関する入門資料、様々なtipsがまとめられた必見サイト。
更新が止まっていってコマンドがちょっと古いのが残念。
(といっても、パラメータ設定で"set no ~"と書かれている部分を
"unset ~"に置き換えればほぼOK。

現在ご覧のページの最終更新日時は2015/03/15 00:44:27です。

Copyright (C) N.Y.City ALL Rights Reserved.

Email: info[at]nycity.main.jp