Matplotlib/pyplot:如何强制执行轴范围?
Posted
技术标签:
【中文标题】Matplotlib/pyplot:如何强制执行轴范围?【英文标题】:Matplotlib/pyplot: How to enforce axis range? 【发布时间】:2011-05-07 09:07:32 【问题描述】:我想用 pylot 绘制一个标准的 2D 折线图,但强制轴的值在 x 上介于 0 和 600 之间,在 y 上介于 10k 和 20k 之间。举个例子吧……
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() 等时也会发生同样的情况。
有什么想法吗?
谢谢。
【问题讨论】:
除了下面的答案,直接链接到“轴”文档:matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis 【参考方案1】:我尝试了上述所有答案,然后总结了如何绘制固定轴图像的管道。它适用于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')
我发现即使我将autoscale_on
设置为False
,将axis
放在代码前面也不起作用。
我使用这段代码创建了一系列动画。下面是将多个固定轴图像组合成动画的示例。
【讨论】:
【参考方案2】:尝试在所有绘图命令之后调用axis
。
【讨论】:
这就是自动缩放的工作原理。如果更改图形,图形会调用自动缩放。 “轴”命令不调用自动缩放。调用自动缩放的“绘图”以外的其他命令与对数刻度和刻度位置相关。自动缩放确保显示操纵的刻度位置。【参考方案3】:在设置限制后调用p.plot
是它重新缩放的原因。你是正确的,关闭自动缩放会得到正确的答案,但是在你的plot
命令之后调用xlim()
或ylim()
之后 也是如此。
我经常使用它来反转 x 轴,我在天文学工作,我们使用向后的星等系统(即更亮的恒星有更小的星等),所以我通常将限制与
lims = xlim()
xlim([lims[1], lims[0]])
【讨论】:
你可以用ax1.invert_xaxis()
得到倒轴。【参考方案4】:
要回答我自己的问题,诀窍是关闭自动缩放功能...
p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
【讨论】:
以上是关于Matplotlib/pyplot:如何强制执行轴范围?的主要内容,如果未能解决你的问题,请参考以下文章