つれづれなる備忘録

日々の発見をあるがままに綴る

gnuplotによるグラフ作成20~表面プロット

 今回はgnuplotによる3Dの表面プロットを実行する方法と表面のカラーを設定する方法について紹介する。

atatat.hatenablog.com

1. 表面プロットの作成

表面プロットを作成するには3Dプロットを実行するsplotにオプションとしてpm3dを指定する。具体的にはsplot 関数 with pm3dとすることで、デフォルトのラインのみの3Dプロットの表面にカラーマップにより修飾された表面プロットが得られる。

f(x,y)=exp((-x**2-y**2)/20)
set isosamples 50,50
splot f(x,y) with pm3d

以下のように表面プロットが得られる。

"ソリッドプロット"
ソリッドプロット

表面プロットのカラーマップをグレースケールに変更するにはset palette grayを用いる。

set palette gray
replot

"グレースケールでの表面プロット"
グレースケールでの表面プロット

2. 表面カラーの設定

 表面プロットの配色を設定するにはset palette defined (値1 "色名1", 値2 "色名2", ・・・)とする。Z値とその時の色を指定すると、その間はグラデーションが適用される。例えば

set palette defined (0 "blue",0.5 "white", 0.7 "red", 1 "black") 
replot

0が青、0.5が白、0.5を赤、1を黒に設定して得られたプロットを下に示す。set palette defined ()は値と色を直接していできるので直観的に扱いやすい。

"表面プロットのカラー変更"
表面プロットのカラー変更

他にset palette rgbformulae func(R) func(G) func(B)でfunc(R)は赤色を変化させるあらかじめ設定されている関数番号、func(G)は緑色を変化させる関数番号、func(B)は青色を変化させる関数番号を示す。 関数番号は、例えば3だと線形でx, 7だとsqrt(x)となっていて関数番号と関数の関係を見るにはshow palette rgbformulaeとすると関数番号と関数の一覧が表示される。

例えば、

set palette rgbformulae 33,13,10
replot

虹色に変化する表面プロットが得られる。

"表面プロットのカラー(虹)"
表面プロットのカラー(虹)

他には

set palette rgbformulae 3,11,6
replot

"表面プロットのカラー(緑-赤-紫)"
表面プロットのカラー(緑)

rgbformulaeの設定は直観的にわかりにくいので、上の例含めてgnuplotのマニュアルに書かれている以下から選択するとよい。

7,5,15 ... 伝統的 pm3d (黒-青-赤-黄):デフォルト

3,11,6 ... 緑-赤-紫

23,28,3 ... 海 (緑-青-白); 他の組み合わせも試してみてください

21,22,23 ... 温度色 (黒-赤-黄-白)

30,31,32 ... 白黒のカラー表示化 (黒-青-紫-黄-白)

33,13,10 ... 虹 (青-緑-黄-赤)

34,35,36 ... AFM 温度色 (黒-赤-黄-白)

3. 表面プロットのマップビュー

 真上から見るマップビューにするにはset view mapとする。さらにアスペクト比が横長なのでset size squareとして縦横を等しくすると以下のようになる。

set view map
set size square
replot

"表面プロットのマップビュー"
表面プロットのマップビュー

4. まとめ

 今回はgnuplotによる3Dの表面プロットを実行する方法と表面のカラーを設定する方法と例について紹介した。