Matplotlib/pyplot:如何强制设置坐标轴范围?
我想用pylot画一个标准的二维线图,但希望x轴的数值限制在0到600之间,y轴的数值限制在1万到2万之间。让我举个例子...
import pylab as p
p.title(save_file)
p.axis([0.0,600.0,1000000.0,2000000.0])
#define keys and items elsewhere..
p.plot(keys,items)
p.savefig(save_file, dpi=100)
不过,坐标轴的范围还是会根据数据的大小自动调整。我理解p.axis的作用是设置最大值和最小值,但并不是强制它们一定要是最大值或最小值。当我尝试使用p.xlim()等方法时,情况也是一样。
有什么想法吗?
谢谢。
4 个回答
11
我尝试了上面所有的答案,然后总结了一下如何绘制固定坐标轴图像的步骤。这些步骤适用于 show
函数和 savefig
函数。
在绘图之前:
fig = pylab.figure() ax = fig.gca() ax.set_autoscale_on(False)
这一步是为了请求一个 ax
,也就是 subplot(1,1,1)
。
在绘图过程中:
ax.plot('You plot argument') # Put inside your argument, like ax.plot(x,y,label='test') ax.axis('The list of range') # Put in side your range [xmin,xmax,ymin,ymax], like ax.axis([-5,5,-5,200])
在绘图之后:
显示图像:
fig.show()
保存图形:
fig.savefig('the name of your figure')
我发现把 axis
放在代码的最前面是没用的,即使我已经把 autoscale_on
设置为 False
。
我用这段代码创建了一系列动画。下面是将多个固定坐标轴图像组合成动画的示例。

29
为了回答我自己的问题,诀窍就是把自动缩放功能关掉...
p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
37
在设置好坐标范围后再调用 p.plot
是导致重新缩放的原因。你说得对,关闭自动缩放确实能得到正确的结果,但在你执行 plot
命令之后调用 xlim()
或 ylim()
也能达到同样的效果。
我经常用这个方法来反转 x 轴,因为我在天文学领域工作,我们使用的亮度系统是反向的(也就是说,亮度更大的星星反而有更小的亮度值),所以我通常会用下面的代码来交换坐标范围:
lims = xlim()
xlim([lims[1], lims[0]])