python - 如何在 matplotlib 中绘制 3D 补丁集合?

标签 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, 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'

最佳答案

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()

关于python - 如何在 matplotlib 中绘制 3D 补丁集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304116/

相关文章:

python - 如何将列表元素转为字符串?

python - 在 matplotlib 中对补丁集合进行动画处理

python - 基于矩阵的Python 3D绘图

python - 如何在我的 GUI 上绘图

python - Python 中的 Plot3d

python - 使用 facecolors 的 matplotlib plot_surface 的颜色条

python3 -c 带有长 cmd 字符串 : Trying to resolve invalid syntax

python - 仅用其减量替换某些数字

python - 三重奏 : multiple tasks reading from the same fd

python-2.7 - Pandas DataFrame Matplotlib BoxPlot 框