matplotlib设置xlim、ylim不生效,椭圆旋转后坐标轴范围异常求助
问题:Matplotlib设置y轴范围失效,如何调整?
我编写了一段用于旋转椭圆的Python代码,希望将x、y轴范围均设置为-3到3,以便直观查看椭圆旋转效果。我使用了plt.axis('equal'),并设置了plt.xlim=([-3, 3])和plt.ylim=([-3, 3]),但仅x轴生效,y轴未达到预期范围(见附图)。请问我哪里操作有误?
代码如下:
import math import numpy as np import matplotlib.pyplot as plt theta = np.arange(0, 2*np.pi, 0.01) a = 1 b = 2 xpos = a*np.cos(theta) ypos = b*np.sin(theta) rotn = math.radians(45); new_xpos = xpos*np.cos(rotn)+ypos*np.sin(rotn) new_ypos = -xpos*np.sin(rotn)+ypos*np.cos(rotn) plt.plot(xpos,ypos, 'b') plt.plot(new_xpos,new_ypos, 'r') plt.axis('equal') plt.xlim=([-3, 3]) plt.ylim=([-3, 3]) plt.show()

解答
你的问题出在错误地将plt.xlim和plt.ylim当成属性赋值,而实际上它们是Matplotlib的函数,需要通过调用的方式设置轴范围。
错误原因
plt.xlim=([-3, 3])这种写法只是给变量plt.xlim赋值,并没有真正触发设置轴范围的逻辑,所以y轴的范围设置根本没有生效。x轴看似生效只是巧合——原数据的x范围刚好接近-3到3,或者axis('equal')的调整让x轴看起来符合预期。
修正方法
把赋值语句改成函数调用:
- 替换
plt.xlim=([-3, 3])为plt.xlim([-3, 3]) - 替换
plt.ylim=([-3, 3])为plt.ylim([-3, 3])
另外建议把plt.axis('equal')放在设置轴范围之后,避免它覆盖你手动设置的范围(虽然这里影响不大,但顺序更合理)。
修正后的完整代码:
import math import numpy as np import matplotlib.pyplot as plt theta = np.arange(0, 2*np.pi, 0.01) a = 1 b = 2 xpos = a*np.cos(theta) ypos = b*np.sin(theta) rotn = math.radians(45) new_xpos = xpos*np.cos(rotn)+ypos*np.sin(rotn) new_ypos = -xpos*np.sin(rotn)+ypos*np.cos(rotn) plt.plot(xpos,ypos, 'b') plt.plot(new_xpos,new_ypos, 'r') plt.xlim([-3, 3]) plt.ylim([-3, 3]) plt.axis('equal') plt.show()
这样修改后,x、y轴都会被正确设置为-3到3的范围,椭圆旋转效果也能直观展示。
内容的提问来源于stack exchange,提问作者mkemper
相关产品推荐
相关产品推荐

