首页 > 解决方案 > plt.Circle() 与带有 projection='3d' 的轴一起使用时有奇怪的行为

问题描述

如果这是预期的行为,我很抱歉,但我想更好地了解这里发生了什么。所以如果我尝试用 plt.Circle 和 projection='3d' 画一个圆

import matplotlib.pyplot as plt

f2 = plt.figure()
ax1 = f2.add_subplot(1,1,1,projection='3d')

x = plt.Circle([1,1],radius=10)
ax1.add_artist(x)

ax1.set_xlim(0,100)
ax1.set_ylim(0,100)
ax1.set_zlim(0,100)

plt.show()

然后我得到以下奇怪的结果:

在此处输入图像描述

虽然如果我只是删除投影='3d',一切都会按预期工作。我会很感激任何关于为什么会发生这种奇怪结果的上下文,我想我不完全理解为什么 projection='3d' 会破坏这么多事情。

标签: pythonmatplotlib

解决方案


你需要一个从 2d 到 3d 的投影来适应你的圆形艺术家。一种方法是创建一个圆形补丁并将其映射到 3d,如此处所示,我已对其进行了调整以回答您的问题。您可以选择zdir='x'成为zdir='y'zdir='z'根据您的需要。

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from mpl_toolkits.mplot3d import Axes3D 
import mpl_toolkits.mplot3d.art3d as art3d

f2 = plt.figure()
ax1 = f2.add_subplot(1,1,1,projection='3d')

circle = Circle((1, 1), 10, edgecolor='red', facecolor=None, fill=False)
ax1.add_patch(circle)
art3d.pathpatch_2d_to_3d(circle, z=0, zdir='x')

ax1.set_xlim3d(-20, 20)
ax1.set_ylim3d(-20, 20)
ax1.set_zlim3d(-20, 20)

在此处输入图像描述


推荐阅读