はじめに
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ファイル)
コメント