gnuplot / plot3d (1)

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

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