[matplotlib 3D] 11. 3Dグラフ上に円、線、面などの図形を表示(pathpatch3d)

matplotlib 3D
スポンサーリンク
スポンサーリンク

コード

スポンサーリンク

解説

モジュールのインポート

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

円にはCircle、線と面(ポリゴン)にはart3dを使う。

3Dグラフの設定

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d',aspect='equal')

fig.add_subplot()にaspect=’equal’をいれることもできる。グラフのアスペクト比が揃う。

円の追加

#Draw a circle on the z=0
q=Circle((5, 5), 3,color='red')
ax.add_patch(q)
art3d.pathpatch_2d_to_3d(q, z=0, zdir="z")

Circle((xの位置、yの位置), 半径) で円の設定。[2]
ax.add_patch(q)で図中に円を追加。
2dの円なので、pathpatch_2d_to_3dで3Dグラフ上に表示できる。[3]

線の追加

line= art3d.Line3D([2,3,4,5,6,7,8],[2,3,4,5,6,7,8],[3,5,3,5,3,5,3], color='g')
ax.add_line(line)

Line3D([xの座標]、[yの座標]、[zの座標])で1個めのX,Y,Zの位置から連続して最後のX,Y,Zの位置にまで線が引かれる。
ax.ad_line(line)で図中に線を追加。[4]

ポリゴンの追加

x = [4,6,6,4]
y = [4,6,6,4]
z = [6,8,6,8]
poly = list(zip(x,y,z))
ax.add_collection3d(art3d.Poly3DCollection([poly],color='m'))

x,y,zの位置情報は、list(zip(x,y,z))でまとめて、Poly3DCollectionにリスト[]としていれてあげれば描写できる。[5]
ax.add_collection3d()で図中に追加できる。

スポンサーリンク

参考

  1. Draw flat objects in 3D plot — Matplotlib 2.1.1 documentation
  2. Matplotlibでグラフを作図-02 円を作図して簡単な信号機アニメーションを …
  3. mpl_toolkits.mplot3d.art3d.pathpatch_2d_to_3d – Matplotlib
  4. mpl_toolkits.mplot3d.art3d.Line3D — Matplotlib 3.0.2 documentation
  5. Plotting 3D Polygons in python-matplotlib – Stack Overflow

コメント