Matplotlibで3Dパッチコレクションをプロットする方法は?
-
25-10-2019 - |
質問
Matplotlibで3Dプロットを作成しようとしています。それぞれが原点と半径1の中心で、さまざまな方向を指して、たとえば半径1の球体を示しています。
2Dでは、サークルパッチコレクションを作成し、軸に追加します。 3Dでは、パッチがまったく表示されるのに苦労しています。
import matplotlib
import matplotlib.pyplot as P
import mpl_toolkits.mplot3d as M3
fig = P.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
circles = matplotlib.collections.PatchCollection(
[matplotlib.patches.Circle((0, 0), 1) for count in range(3)],
offsets=(0, 0))
M3.art3d.patch_collection_2d_to_3d(circles, zs=[0], zdir='z')
ax.add_collection(circles)
P.show()
このプログラムを実行すると、プロットウィンドウ全体が青でいっぱいになります。つまり、プロットをどのように回転させても、パッチの顔の色です。設定した場合 facecolor='none'
の中に PatchCollection()
電話してから空 Axes3D
現れます。
私が試したこと:
- 使用する場合
CircleCollection
aの代わりにPatchCollection
, 、パッチはまったく表示されません。 zs
のパラメーターpatch_collection_2d_to_3d()
呼び出しは奇妙です。どちらも置くことを期待しますzs=0
(3つのパッチすべてに1つのz座標)またはzs=[0,0,0]
(各パッチの個別のz座標)が、両方ともエラーを投げます。ValueError:シーケンスで配列要素を設定します。
パッチを異なる方向に向けるために、私は次のようなものを渡すことができると期待します
zdir=['x', 'y', 'z']
しかし、結果は私がそれを渡すか、'z'
また['z']
.- 私もできると期待していたでしょう
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
パッチコレクションを2Dから3Dに変換する代わりに、エラーもスローします。属性エラー: 'patch3dcollection'オブジェクトには属性がありません 'set_sort_zpos'
解決
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.art3d as art3d
fig = plt.figure()
ax=fig.gca(projection='3d')
for i in ["x","y","z"]:
circle = Circle((0, 0), 1)
ax.add_patch(circle)
art3d.pathpatch_2d_to_3d(circle, z=0, zdir=i)
ax.set_xlim3d(-2, 2)
ax.set_ylim3d(-2, 2)
ax.set_zlim3d(-2, 2)
plt.show()
所属していません StackOverflow