我想在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