问题描述
我正在尝试使用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,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')
,它会更改绘图框的尺寸以使轴比例相等。区别在于此选项在设置后将阻止进一步的自动缩放。
例如,对于“缩放”轴,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()