我想在matplotlib中製作一個三維圖,上面有三個圓,每個圓都以原點爲中心,半徑爲1,指向不同的方向 - 例如說明半徑爲1的球體。如何繪製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()
無論我如何旋轉繪圖,運行此程序都會用藍色填充整個繪圖窗口,即貼片的顏色。如果我在PatchCollection()
呼叫中設置了facecolor='none'
,則顯示空的Axes3D
。
事情我已經嘗試:
- 如果我使用的
CircleCollection
代替PatchCollection
,沒有補丁程序顯示在所有。 參數中的
patch_collection_2d_to_3d()
調用是奇數;我希望把任何zs=0
(一個z座標爲所有三個補丁)或zs=[0,0,0]
(每一片單獨的z座標),但兩者的那些引發錯誤:ValueError: setting an array element with a sequence.
以定向不同的補丁,我希望能夠通過像
zdir=['x', 'y', 'z']
這樣的東西,但結果是沒有什麼不同,無論我通過那個或'z'
或['z']
。- 我本來還希望能夠做
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
,而不是從2D到3D轉換的補丁集合,而是拋出一個錯誤太:AttributeError: 'Patch3DCollection' object has no attribute 'set_sort_zpos'
@莉莉絲的回答是一個很好的替代方法;有誰能夠啓發我,爲什麼我的方法行不通? – ptomato 2011-06-15 09:26:57