Axes3D.plot_surface:曲面
Axes3D.plot_surface() で 3 次元座標に曲面を描くことができます。
Axes3D.plot_surface(X, Y, Z, *args, **kwargs)
X, Y, Z には 2 次元配列データを渡します。
サンプルコードでは $Z=\cos(\sqrt{X^2+Y^2})$ で表される曲面(同心円状に広がる波)を描いてみます。
# PYTHON_MATPLOTLIB_SURFACE import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Figureを追加 fig = plt.figure(figsize=(10, 6)) # FigureにAxesを追加 ax = fig.add_subplot(111, projection='3d') # 軸ラベルを設定 ax.set_xlabel("x", size=16, color="b") ax.set_ylabel("y", size=16, color="b") ax.set_zlabel("z", size=16, color="b") # 円周率 pi = np.pi # 分割数 n = 256 # 範囲-4pi~4piをn分割して(x,y)データを作成 x = np.linspace(-4*pi, 4*pi, n) y = np.linspace(-4*pi, 4*pi, n) # 格子点の作成 X, Y = np.meshgrid(x, y) # 高度の計算式 Z = np.cos(np.sqrt(X**2 + Y**2)) # 曲面を描画(カラーマップは'plasma_r') ax.plot_surface(X, Y, Z, cmap = "plasma_r")
Axes3D.plot_trisurf:パラメータ曲面
Axes3D.plot_trisurf() は、(X, Y, Z) に 1 次元配列を渡すと三角形メッシュを使って曲面を形成します。このメソッドを使うと媒介変数(パラメータ)で表された曲面を描くことができます。
Axes3D.plot_trisurf(X, Y, Z, *args, **kwargs)
サンプルコードでは
\[x=au\cos v,\quad y=bu\sin v,\quad z=u^2\]
という方程式で表される楕円放物面を描いてみます。$u$ と $v$ は媒介変数(パラメータ)です。
# PYTHON_MATPLOTLIB_TRISURF import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(8, 6)) # Figureに3DAxesを追加 ax = fig.add_subplot(111, projection='3d') # 軸ラベルを設定 ax.set_xlabel("x", size=16, color="b") ax.set_ylabel("y", size=16, color="b") ax.set_zlabel("z", size=16, color="b") # パラメータ u = np.arange(0, 120, 0.01) v = np.arange(0, 120, 0.01) a = 2 b = 3 # 楕円放物面の方程式 X = a * u * np.cos(v) Y = b * u * np.sin(v) Z = u ** 2 # 曲面を描画(カラーマップはbwrを指定) ax.plot_trisurf(X, Y, Z, cmap="bwr")
Axes3D.plot_wireframe:ワイヤーフレーム
Axes3D.plot_wireframe() を使うと ワイヤーフレーム を描くことができます。
Axes3D.plot_wireframe(X, Y, Z, *args, **kwargs)
X, Y は 2 次元配列データを与えて格子点を作成し、それぞれの格子点に対して高度 Z を計算して曲面を描きます。以下のサンプルコードでは、方程式 $Z=X^2-Y^2$ で表される双曲放物面を描きます。
# PYTHON_MATPLOTLIB_WIREFRAME import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d # Figureを追加 fig = plt.figure(figsize=(10, 6)) # 3DAxesを追加 ax = fig.add_subplot(111, projection="3d") # Axes(サブプロット)のタイトルを設定 ax.set_title("hyperbolic paraboloid", size=16) # 軸ラベルを設定 ax.set_xlabel("x", size=16) ax.set_ylabel("y", size=16) ax.set_zlabel("z", size=16) # (x,y)データを作成 x = np.linspace(-8, 8, 256) y = np.linspace(-8, 8, 256) # 格子点の作成 X, Y = np.meshgrid(x, y) # 高度の計算式 Z = X**2 - Y**2 # ワイヤーフレームで双曲放物面(hyperbolic paraboloid)を描く ax.plot_wireframe(X, Y, Z, color="darkblue") plt.show()
コメント