如何在Matplotlib中制作3D圆

时间:2019-07-03 12:56:12

标签: python matplotlib plot 3d

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

2 个答案:

答案 0 :(得分:0)

您需要常规的导入以及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()

enter image description here

答案 1 :(得分:0)

mpl_toolkits.mplot3d.art3d

https://matplotlib.org/3.2.1/gallery/mplot3d/pathpatch3d.htmlmentioned 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()

给出:

enter image description here

这比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。上进行了测试