Matplotlib で表面プロットを作成する方法

Suraj Joshi 2020年6月25日
Matplotlib で表面プロットを作成する方法

Matplotlib では、Matplotlib の 2D 関数の上に構築された 3D プロットメソッドを含む 3D 分析と可視化のために mplot3d ツールキットを使用します。Matplotlib の任意の軸の作成関数に projection='3d'引数を渡すことにより、3 次元の軸を作成できます。3 次元軸が初期化されたら、plot_surface() メソッドを使用して表面プロットを生成できます。

Axes3D.plot_surface() メソッド

Axes3D.plot_surface(X, Y, Z, *args, **kwargs) メソッドを使用して、表面プロットを作成できますここで、X、Y、Z はすべて 2 次元配列です。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure(figsize=(8, 6))
ax3d = plt.axes(projection="3d")

xdata = np.linspace(-3, 3, 100)
ydata = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(xdata, ydata)
Z = 1 / (1 + np.exp(-X - Y))

ax3d = plt.axes(projection="3d")
ax3d.plot_surface(X, Y, Z, cmap="plasma")
ax3d.set_title("Surface Plot in Matplotlib")
ax3d.set_xlabel("X")
ax3d.set_ylabel("Y")
ax3d.set_zlabel("Z")

plt.show()

plot_surface を使用した matplotlib の表面プロット

これにより、Matplotlib を使用して 3D 空間に表面プロットが生成されます。ここで、cmap パラメータを使用して、3D 色空間でデータを適切に表現します。プロットの色は、従属変数の値の変化に応じて変化します。

以下のパラメーターを変化させてプロットをカスタマイズできます。

  • rstride:デフォルト値が 10 の行ステップサイズ
  • cstride:デフォルト値が 10 の列ステップサイズ
  • color:表面の色
  • cmap:表面のカラーマップ
  • facecolors:サーフェスの各パッチの面の色
  • norm:値を色にマップする Normalize のインスタンス
  • vmin:マップする最小値
  • vmax:マップする最大値
  • shade:フェイスカラーをシェーディングするかどうか
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure(figsize=(8, 6))
ax3d = plt.axes(projection="3d")

xdata = np.linspace(-3, 3, 100)
ydata = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(xdata, ydata)
Z = 1 / (1 + np.exp(-X - Y))

ax3d = plt.axes(projection="3d")
surf = ax3d.plot_surface(X, Y, Z, rstride=7, cstride=7, cmap="viridis")
fig.colorbar(surf, ax=ax3d)
ax3d.set_title("Surface Plot in Matplotlib")
ax3d.set_xlabel("X")
ax3d.set_ylabel("Y")
ax3d.set_zlabel("Z")

plt.savefig("Customized Surface Plot.png")

plt.show()

カスタマイズされた表面プロット

この例では、colorbar() メソッドを使用して図にカラーバーを追加し、表面プロットオブジェクトをメソッドに渡して、図をよりわかりやすくします。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn