python - 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' 会破坏这么多事情。
解决方案
你需要一个从 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)
推荐阅读
- ftp - 从 1000 个基因组数据中下载 ftp 目录内容
- java - 当您有小段时,如何显示每条可能采取的路径?
- r - 循环读取 CSV,添加列,用文件名填充列,堆栈 data.frames?
- async-await - 量角器无法理解的失败 - 功能超时确保承诺在 5000 毫秒内解决
- mysql - 如何简化以下 SQL 查询?
- java - 从 JSON 数组中删除对象
- python - 什么是好的做法 - 我应该创建一个新对象还是重用同一个对象?
- python - 如何从相对路径中为 pip3 模块添加前缀
- dart - 有没有一种方法可以在同一路线上以不同的方式在不同的时间显示两个小部件,一次由一个按钮控制?
- haskell - 修改可扩展记录时重叠实例