如何用 matplotlib.pyplot 画圆

How to draw a circle with matplotlib.pyplot

我正在尝试使用 pyplot 绘制一个圆。然而,在情节中看起来像一个椭圆。

变量 r 可以是任意值。

theta = np.linspace(0, 2*np.pi, 100)
   
r= r/2

x = r*np.cos(theta)
y = r*np.sin(theta)
   
plt.plot(x,y)

您的代码是正确的。您的图形的纵横比很可能不相等。将 figsize 设置为相等的参数应该可以解决这个问题

theta = np.linspace(0, 2*np.pi, 100)
r= r/2
x = r*np.cos(theta)
y = r*np.sin(theta)
plt.figure(figsize=(10,10))
plt.plot(x,y)

使用pyplot.axis('equal')方法(documentation)。这将告诉 matplotlib 自动保持 x 轴和 y 轴缩放比例相等,即使您更改轴限制也能正常工作:

import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0, 2*np.pi, 100)
r= 2
x = r*np.cos(theta)
y = r*np.sin(theta)
plt.plot(x,y)
plt.axis('equal')
plt.show()

如您所见,即使 x 轴和 y 轴具有不同的限制,这也会导致圆仍然是圆。它还允许在绘图中添加其他项目时自动缩放,并且在通过添加轴标签或绘图标题修改绘图区域时它将保持纵横比。

Matplotlib 文档中还有其他示例:Axis Equal Demo

另一种选择是使用 pyplot.axis('scaled'),它会更改图框的尺寸以使轴缩放比例相等。不同之处在于,此选项设置后将阻止进一步的自动缩放。

例如,对于 'scaled' 轴,matplotlib 将遵守您为 x 和 y-axis 限制指定的值:

import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0, 2*np.pi, 100)
r= 2
x = r*np.cos(theta)
y = r*np.sin(theta)
plt.plot(x,y)
plt.axis('scaled')
plt.ylim(-3, 3)
plt.xlim(-3, 3)
plt.show()