10

たとえば、半径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'

4

1 に答える 1