質問

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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top