[matplotlib 3D] 34. 円柱(直交座標系)

matplotlib 3D

はじめに

本記事はMatplotlibを使用した3D空間での円柱の描画方法を解説しています。直交座標系における円柱の数学的定義から始まり、具体的なPythonコードによる実装方法を説明します。

コード

解説

モジュールのインポート

from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.art3d as art3d
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle

3Dグラフにする設定

fig=plt.figure(figsize=(6,6))
ax = fig.gca(projection='3d')

データ生成

x = np.linspace(-2, 2,100)
z = np.linspace(0, 10, 100)
X, Z = np.meshgrid(x, z)
Y = np.sqrt(2**2 - X**2)

半径2、高さ10の円柱を作成します。X軸とZ軸でmeshgridを作成し[1]、Y軸の値はピタゴラスの定理を用いて算出します[2]

プロットの作成

ax.plot_surface(X, Y, Z, linewidth=1, color='g',alpha=0.5)
ax.plot_surface(X, -Y, Z, linewidth=1,color='g',alpha=0.5)

円柱の描画では+Y方向と-Y方向の両面をプロットする必要があります。例えば、color=’g’パラメータで緑色に、alpha=0.5で透明度50%のsurfaceグラフを作成できます。

蓋の作成

#Draw lid
futa = Circle((0, 0), 2,fc='g',ec='g',alpha=0.5)
ax.add_patch(futa)
art3d.pathpatch_2d_to_3d(futa, z=10, zdir="z")

Circleパッチを使用して、半径2、中心座標(0,0)の円を作成します。

ax.add_patchメソッドでこの円をグラフに追加します。

pathpatch_2d_to_3d関数を使用することで、2次元の円パッチを3Dグラフ上に表示できます。

[3]

この円は円柱の蓋として機能するため、表示位置はz=10、方向はzdir=”z”と指定します。

底の作成

#Draw bottom
soko = Circle((0, 0), 2,fc='g',ec='g',alpha=0.5)
ax.add_patch(soko)
art3d.pathpatch_2d_to_3d(soko, z=0, zdir="z")

同様に底も作成します。底の位置は、z=0、zdir=”z”と指定します。

軸ラベル、軸範囲の設定

ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
ax.set_zlim(0,10)
#ax.set_aspect('equal')
コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

  1. python で等高線を描くなら meshgrid して contour | コード7区
  2. 3分でわかる!三平方の定理(ピタゴラスの定理)の公式とは?
  3. [matplotlib 3D] 11. pathpatch3d
  4. python – Add cylinder to plot – Stack Overflow

コメント