[matplotlib 3D] 5. 3D surface plotで陰影のあるグラフ

matplotlib 3D

はじめに

matplotlibのmplot3dにより、陰影付き3Dサーフェスプロットを作成する方法と光源の位置などに関する設定について説明する。

コード

解説

モジュールのインポート

データの読み込み

matplotlib/mpl-data/sample_data/にあるサンプルデータ(jacksboro_fault_dem.npz)を読み込む。ファイルがない場合、下記のように表示される。

FileNotFoundError: [Errno 2] No such file or directory

この場合、下記からダウンロードする。

matplotlib/lib/matplotlib/mpl-data/sample_data/jacksboro_fault_dem.npz at main · matplotlib/matplotlib
matplotlib: plotting with Python. Contribute to matplotlib/matplotlib development by creating an account on GitHub.

.npzの拡張子は、複数のnp.arrayをバイナリ形式で保存したデータで
np.load(filename)[‘elevation’]のように引数を指定すればデータを取り出せる。

z.shapeは配列のサイズで、(344, 403)なので、nrowsが344、ncolsが403となる。x,yのサイズもmeshgridをしているので同様となる。

np.s_はスライスのことで、5個目から50個目までの配列を取り出すという意味。
これでx,y,zの配列はどれも45×45のshapeとなる。

陰影つき3D surface plotの作成

LightSourceの270が光源の方位(azdeg)で、45が上下方向の角度(altdeg)となる。
ls.shadeで影の詳細な設定が可能となる。vert_exagは高さの強調度の設定、blend_modeはデータと陰影による効果をどの程度ブレンドするかの設定で、’hsv’, ‘overlay’, ‘soft’から選択可能となっている。
plot_surfaceではshade=Falseとしてfacecolorsで陰影のついたカラーを設定する形式となっている。

光源の位置(azdeg)を変えた場合

光源の角度(altdeg)を変えた場合

標高値誇張量(vert_exag)を変化させたときの変化

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

ndarrayのファイル保存
NumPyによるndarrayのファイル読み込み、ファイル書き込み方法はさまざまです。読み込み/書き込み関数(メソッド)対応表テキスト形式、バイナリ形式、拡張子の指定などをここでまとめておきます。書き込み読み込み形式拡張子備考numpy.s
Custom hillshading in a 3D surface plot — Matplotlib 3.1.0 documentation
matplotlib.colors.LightSource — Matplotlib 3.1.2 documentation
matplotlib.colors.LightSource — Matplotlib 3.1.2 documentation

コメント