Python 如何在matplotlib中绘制三维面片集合?

Python 如何在matplotlib中绘制三维面片集合?,python,matplotlib,mplot3d,Python,Matplotlib,Mplot3d,我试图在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,

我试图在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()
运行此程序时,无论我如何旋转绘图,整个绘图窗口都会充满蓝色,即面片的面颜色。如果我在
PatchCollection()
调用中设置
facecolor='none'
,则会显示一个空的
Axes3D

我尝试过的事情:

  • 如果我使用
    CircleCollection
    而不是
    PatchCollection
    ,则不会显示任何补丁
  • patch_collection_2d_to_3d()
    调用中的
    zs
    参数是奇数;我希望将
    zs=0
    (所有三个补丁都有一个z坐标)或
    zs=[0,0,0]
    (每个补丁都有一个单独的z坐标),但这两个都会引发错误:

    ValueError:使用序列设置数组元素

  • 为了使补丁的方向不同,我希望能够传递类似于
    zdir=['x','y','z']
    的消息,但是无论我传递该消息还是
    'z'
    ['z']
    结果都没有什么不同

  • 我还希望能够执行ax.add_collection3d(圆圈,zs=[0,0,0],zdir=['x','y','z'])而不是将补丁集合从2d转换为3d,但这也会引发一个错误: AttributeError:“Patch3DCollection”对象没有属性“set\u sort\u zpos”


@莉莉丝的回答是一个很好的替代方法;有人能告诉我为什么我的方法不起作用吗?我们怎么能把它推广到(x,y,z)=(a,b,c)的圆中心?
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from mpl_toolkits.mplot3d import Axes3D 
import mpl_toolkits.mplot3d.art3d as art3d


fig = plt.figure()
ax=fig.gca(projection='3d')

for i in ["x","y","z"]:
    circle = Circle((0, 0), 1)
    ax.add_patch(circle)
    art3d.pathpatch_2d_to_3d(circle, z=0, zdir=i)


ax.set_xlim3d(-2, 2)
ax.set_ylim3d(-2, 2)
ax.set_zlim3d(-2, 2)

plt.show()