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

matplotlib 3D

はじめに

matplotlib mplot3dにより3Dグラフ上に円柱を表示する方法について説明する。座標系は直交座標系を用いる。

コード

解説

モジュールのインポート

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で透明度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')
コードをダウンロード(.pyファイル)

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

参考

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

コメント