我正在尝试在 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
的。
我尝试过的事情:
- 如果我使用 a
CircleCollection
而不是 aPatchCollection
,则根本不会出现任何补丁。 调用中的
zs
参数patch_collection_2d_to_3d()
是奇数;我希望放置zs=0
(所有三个补丁的一个 z 坐标)或zs=[0,0,0]
(每个补丁一个单独的 z 坐标),但是这两个都会引发错误:ValueError:使用序列设置数组元素。
为了以不同的方式定位补丁,我希望能够通过类似的东西,
zdir=['x', 'y', 'z']
但无论我通过那个 or'z'
or ,结果都没有什么不同['z']
。- 我也希望能够做
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
而不是将补丁集合从 2d 转换为 3d,但这也会引发错误:AttributeError:“Patch3DCollection”对象没有属性“set_sort_zpos”