たとえば、半径1の球を示すために、それぞれが原点を中心とし、半径1で、さまざまな方向を指す3つの円を含むmatplotlibで3Dプロットを作成しようとしています。
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
の代わりにを使用するとPatchCollection
、パッチがまったく表示されません。呼び出しの
zs
パラメーターpatch_collection_2d_to_3d()
は奇数です。zs=0
(3つのパッチすべてに1つのz座標)またはzs=[0,0,0]
(パッチごとに個別のz座標)のいずれかを配置することを期待しますが、どちらもエラーをスローします。ValueError:シーケンスを使用して配列要素を設定します。
パッチの向きを変えるために、次のようなものを渡すことができると期待しますが、それを渡すか、または
zdir=['x', 'y', 'z']
を渡すかによって結果に違いはありません。'z'
['z']
- パッチコレクションを2Dから3Dに変換する代わりにできることも期待していまし
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
たが、それでもエラーが発生します。AttributeError:'Patch3DCollection'オブジェクトに属性がありません'set_sort_zpos'