Matplotlib 3Dグラフの角度指定

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()
../_images/cb85d4ef325f71ec41b1f740fc66ad01b1b8c903f65ee4f831a235a2d170c872.png

角度の指定#

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()
../_images/60cd38f339db5362344e2b05b15576577e8fd2f8cfdde70c908dd412dbe578dd.png

上の例から、さらに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()
../_images/2e51c4292dea7c499e3e3e12f071019b53d3652246671391fb637921c98a21c0.png