はじめに
matplotlibの3Dグラフ機能を使用すると、データの立体的な表現が可能になります。特にサーフェスプロットは3次元データの視覚化に適しています。ここでは、陰影付き3Dサーフェスプロットを作成する方法と光源の位置などに関する設定について説明します。
コード

解説
モジュールのインポート
データの読み込み
matplotlibの「matplotlib/mpl-data/sample_data/」ディレクトリにあるサンプルデータ(jacksboro_fault_dem.npz)を読み込みます。該当ファイルが存在しない場合は、以下のようなメッセージが表示されます。
FileNotFoundError: [Errno 2] No such file or directory
この場合、下記からダウンロードします。
.npz拡張子のファイルは、複数のnp.arrayをバイナリ形式で保存したデータです。np.load(filename)[‘elevation’]のように引数を指定することでデータを取り出せます。
z.shapeは配列のサイズを表し、(344, 403)の場合、行数が344、列数が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)を変化させたときの変化
参考

コメント