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:如何强制执行轴范围?的主要内容,如果未能解决你的问题,请参考以下文章

为xp轴指定matplotlib.pyplot直方图的值

matplotlib.pyplot画图笔记

Matplotlib库(简介)

使用matplotlib.pyplot中plot()绘制折线图

002.matplotlib.pyplot坐标轴的操作

002.matplotlib.pyplot坐标轴的操作