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

2024-05-14 12:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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: 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'


Tags: importaddmatplotlibas半径figax方向
1条回答
网友
1楼 · 发布于 2024-05-14 12:57:32
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()

相关问题 更多 >

    热门问题