GNUPLOT

- not so Frequently Asked Questions -

update 2004/9/5

3次元プロットのあれこれ (その1)

1 | 2 | 3 | 4

Z軸のゼロ点がXY平面から離れてしまう.

splotでは,Z軸の原点は,XY平面から少し離れた所にきます.こ れをXY平面上に持ってきたいときには, set ticslevel を使い ます.ticslevelの値を0にすると,Z軸の原点がXY平面と一致します.

gnuplot> set ticslevel 0
gnuplot> splot (x**2)*(y**2)
fig/sample6.1
up

もっとメッシュを細かくしたい.

関数を3次元プロットするときの,メッシュ(XY座標)の間隔は isosample で決まります.この数値が小さい程メッシュは荒くなり,大き くするとメッシュは細かくなります.標準値は10です.

メッシュが荒すぎると隠線処理 set hidden3d の時に問題になりま す.下の例は,標準値10で関数 z=sin(x)*cos(y)をプロットしたものです.上 側が隠線処理をしない場合,下は隠線処理をした場合です.

fig/sample6.2a fig/sample6.2b

これを避けるには,isosampleの値を大きくします.下の例では40に しています.X,Yそれぞれのメッシュ間隔を別々に変えるには, set isosample 20,40のように2つの値を与えます.

gnuplot> set isosample 40
fig/sample6.2c fig/sample6.2d
up

見る角度を変えたい.

3次元表示での視点は,set viewによって制御されます. 標準の設定は,

gnuplot> show view

        view is 60 rot_x, 30 rot_z, 1 scale, 1 scale_z

となっています.回転させる前は,画面上にXY平面があり,Z軸は画面に垂直 方向となっています.

fig/sample6.3a

まずX軸を60度(rot_x)回転させます.この結果Z軸は画面に対して 傾いた方向に変わります.

fig/sample6.3b

次に,新しいZ軸に対して30度(rot_z)回転します.これがsplotで 描かれる標準の視点です.

fig/sample6.3c

set viewで回転角を変えると,図が回転します.

fig/sample6.3d set view 60,15
fig/sample6.3e set view 60,45
fig/sample6.3f set view 60,75
fig/sample6.3g set view 15,30
up

等高線を変えたい.

等高線は, set cntrparam で制御できます.

gnuplot> set contour
gnuplot> set cntrparam levels 10
gnuplot> set cntrparam levels incremental -1, 0.2, 1
gnuplot> set cntrparam levels discrete -0.2, -0.5, 0.2, 0.5

上では3通りの設定方法を示しています.levelsでは,等高線を何 段階に分けて描くかで与えます.上の例では10段階に設定しています. incrementalは,等高線を描く高さを,初期値・増分・最終値で 与えます.最後のdiscreteでは,等高線を描く高さを直接列挙し ています.

等高線の凡例は,プロットの凡例と同じ所に描かれます.等高線の凡例だけ を消すには, set noclabel を使います.この時,全ての等高線 の線の種類は同一(表面をプロットするのに使われている線種の次の線種) になります.

等高線の線種は,表面をプロットしている線種の次のものから順番に使われ ます.等高線の線種を自由に制御する方法は無いようです.この場合は, tgif等のファイルに落して編集すれば良いでしょう.

up

等高線だけを2次元プロットにして描きたい.

3次元表示での視点を真上にすれば,等高線だけの2次元プロットになりま す.まず,3次元表示をした後, set view で視点を0,0に変更しま す.また,表面を描かないように set nosurface を指定します.

gnuplot> set contour base
gnuplot> set nosurface
gnuplot> set view 0,0
fig/sample6.5a
set view 60,30
fig/sample6.5b
set view 0,0

set view 0,0にすると,Y軸は図の右側に来ます.図の左に移動 したければ,set view 180,180にします.但し,Y軸にlabelを付け たとき,普通の2次元プロットであれば,文字列はY軸に沿って下から上に向かっ て表示されますが,この様に3次元プロットを2次元にして見ると,Y labelは 常に横向きになります.通常の2次元プロットと同じようにするには,下で述 べているtableを使うとよいでしょう.

ターミナルを table にして等高線の座標を一旦ファイルに書き出し,そ れを2次元プロットすれば,もう少しきれいな等高線図を作ることができます. ぷろっとぎゃらりぃに具体例があります.

gnuplot> set term table
gnuplot> set output "table.dat"
gnuplot> replot
gnuplot> set output
gnuplot> set term x11
gnuplot> plot "table.dat" using 1:2 with lines

[ver.4] ONLY !

なお,pm3dを使えば, カラーマップを使った2次元プロットを簡単に作成できます.

up