如何用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)

figure of circle

,

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

import matplotlib.pyplot as plt
import numpy as np

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

Plot of a circle that looks circular

如您所见,即使x和y轴的限制不同,这也会使圆成为圆。如果在绘图中添加了其他项目,它还可以实现自动缩放,并且当通过添加轴标签或绘图标题来修改绘图区域时,它将保持纵横比。

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

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

例如,对于“缩放”轴,matplotlib将遵循您为x和y轴限制指定的值:

import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0,y)
plt.axis('scaled')
plt.ylim(-3,3)
plt.xlim(-3,3)
plt.show()

Plot of circle with equal limits on the x and y axes