Matplotlib 3Dグラフの角度指定#
※記事内に商品プロモーションを含むことがあります。
公開日
Matplotlib 3Dグラフの表示角度を指定する方法を解説します。
Axes
オブジェクトのview_init()
メソッドを使用します。
デフォルトの3Dグラフ#
まず、角度を指定しない3Dグラフを以下に示します。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*np.pi, 0.1)
y = np.arange(0, 4*np.pi, 0.1)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.sin(Y)
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': '3d'})
ax.plot_surface(X, Y, Z, cmap="viridis")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
plt.show()

角度の指定#
3Dグラフの角度を指定するには、Axes
オブジェクトのview_init()
メソッドを使用します。
このメソッドの主な引数は以下の通りです。
Axes.view_init(elev=None, azim=None, roll=None, vertical_axis="z")
引数の意味は以下の通りです。
elev
:vertical_axis
に垂直な平面からの角度(仰角)[度]azim
:vertical_axis
軸周りの回転角度(回転角)[度]roll
: 視点からグラフに向かう軸周りの回転角度[度]vertical_axis
: 垂直軸 {"x"
,"y"
,"z"
(デフォルト)}
vertical_axis
のデフォルト値はz軸であるため、このときelev
はx-y平面からの角度、azim
はz軸周りの回転角度となります。
また、角度はラジアンではなく[度]で指定し、負の値も指定可能です。
以下に例を示します。
elev=20
であるためx-y平面から20度の仰角、azim=70
であるためx軸から70度の回転角があります。
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': '3d'})
ax.plot_surface(X, Y, Z, cmap="viridis")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
ax.view_init(elev=20, azim=70)
plt.show()

上の例から、さらにroll=30
の設定を追加した例を示します。
反時計回りに30度グラフが回転しています。
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': '3d'})
ax.plot_surface(X, Y, Z, cmap="viridis")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
ax.view_init(elev=20, azim=70, roll=30)
plt.show()
