[matplotlib 3D] 35. 円柱(円筒座標)

matplotlib 3D

はじめに

matplotlib mplot3dで円柱を表示する方法を解説する。ここでは円筒座標系でデータを生成する。

コード

コードをダウンロード

解説

モジュールのインポート

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()
ax = fig.gca(projection='3d')

データ生成

z = np.linspace(0, 10, 100)
theta = np.linspace(0, 2np.pi, 100)
Theta, Z=np.meshgrid(theta, z)
X = 2*np.cos(Theta)
Y = 2*np.sin(Theta)

半径2, 高さ10の円柱にする。
theta,zでmeshgridを作成して[1]、X, Yは円筒座標なので、

$$x=rcos\theta\\y=rsin\theta$$

とする[2]

プロットの作成

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

color=’g’で緑色、alpha=0.5で透明度0.5の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.path_patchでグラフに追加。
pathpatch_2d_to_3dで3dグラフ上に2dの円が表示可能となる。[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')

参考

  1. Numpy入門 メッシュグリッドと可視化 – Python学習講座
  2. 円筒座標系 | CAE用語集| ソフトウェアクレイドル
  3. python – Add cylinder to plot – Stack Overflow
matplotlib 3Dpython
この記事をシェアする
sabopy.comをフォローする
サボテンパイソン

コメント