【问题标题】:How to do a 3D circle in Matplotlib如何在 Matplotlib 中做一个 3D 圆
【发布时间】:2019-11-14 04:14:10
【问题描述】:

我是 Python 的初学者。我正在尝试使用与 Z 轴相切的 matplotlib 绘制一个圆。我知道如何在 3D 中绘制球体,但不知道如何在 3D 图中绘制圆/环。有人可以帮我写代码吗?提前致谢!

【问题讨论】:

标签: python matplotlib plot 3d


【解决方案1】:

您需要通常的导入,以及 3D 工具包

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

您需要启用 3D 的 axes 对象

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

你需要一个圆,包含在平面y-z

theta = np.linspace(0, 2 * np.pi, 201)
y = 10*np.cos(theta)
z = 10*np.sin(theta)

现在我们可以绘制原始圆,例如,围绕 z 轴旋转的多个圆,其中心也放置在固定距离处(等于圆'半径)从 z 轴开始,因此它们与其相切

for i in range(18):
    phi = i*np.pi/9
    ax.plot(y*np.sin(phi)+10*np.sin(phi),
            y*np.cos(phi)+10*np.cos(phi), z)

最终我们放置一个垂直轴和一个图例

ax.plot((0,0),(0,0), (-10,10), '-k', label='z-axis')
ax.legend()

是时候看看我们得到了什么

plt.show()

【讨论】:

  • 感谢您的帮助和时间。你能帮我再解决一个问题吗?我也发布了这个问题。您可以单击链接转到该问题。 stackoverflow.com/q/56868672/11728630
  • @HirenGadhiya 我已经更新了我的答案,因为我已经找到了你的另一个问题......我希望我的答案更接近你真正提出的问题。 - 我会评论另一个问题,但我不会回答,因为我认为这是非常离题的编程。咻。
  • 我可能得到了当之无愧的反对票,所以我问“我怎样才能改进我的答案?”
【解决方案2】:

mpl_toolkits.mplot3d.art3d

https://matplotlib.org/3.2.1/gallery/mplot3d/pathpatch3d.html 是mentioned in a comment,示例可以最小化为:

#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import mpl_toolkits.mplot3d.art3d as art3d

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Draw a circle on the x=0 'wall'
p = Circle((5, 5), 3)
ax.add_patch(p)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")

ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)

plt.show()

给出:

这比https://stackoverflow.com/a/56871467/895245 好一点,因为它直接使用更高级别的Circle 对象,而不是要求您显式地绘制线条。

不幸的是,matplotlib 中的 3D 支持有点受限,如文档本身所述,您必须做一些额外的工作才能在不平行于主坐标平面的平面上绘图:How can matplotlib 2D patches be transformed to 3D with arbitrary normals?

在 matplotlib==3.2.2 上测试。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2019-11-15
    • 2017-12-15
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多