Matplotlib y 轴限制在设置 x 轴限制后没有更新?

Tim*_*Tim 8 plot matplotlib python-2.7

我正在尝试绘制某些数据的子集,但在设置 x 轴限制后,y 轴限制未正确更新。有没有办法在设置 x 轴限制后让 matplotlib 更新 y 轴限制?

例如,考虑下图:

import numpy
import pylab
pylab.plot(numpy.arange(100)**2.0)
Run Code Online (Sandbox Code Playgroud)

这使: 图 1 全范围

这工作正常。但是,如果我只想查看从 x=0 到 x=10 的部分,y 缩放就搞砸了:

pylab.plot(numpy.arange(100)**2.0)
pylab.xlim(0,10)
Run Code Online (Sandbox Code Playgroud)

这使: 绘制 1 个子集.

在前一种情况下,x 轴和 y 轴已正确缩放,在后一种情况下,即使未绘制数据,y 轴仍然缩放相同。我如何告诉 matplotlib 更新 y 轴缩放?

明显的解决方法是绘制数据本身的子集,或者通过检查数据手动重置 y 轴限制,但这些都相当麻烦。

更新:

上面的例子是简化的,在更一般的情况下,有:

pylab.plot(xdata, ydata1)
pylab.plot(xdata, ydata2)
pylab.plot(xdata, ydata3)
pylab.xlim(xmin, xmax)
Run Code Online (Sandbox Code Playgroud)

手动设置 y 轴范围当然是可能的

subidx = N.argwhere((xdata >= xmin) & (xdata <= xmax))
ymin = N.min(ydata1[subidx], ydata2[subidx], ydata3[subidx])
ymax = N.max(ydata1[subidx], ydata2[subidx], ydata3[subidx])
pylab.xlim(xmin, xmax)
Run Code Online (Sandbox Code Playgroud)

但这至少可以说很麻烦(恕我直言)。有没有更快的方法来做到这一点而无需手动计算绘图范围?谢谢!

更新 2:

函数autoscale做了一些缩放,似乎是这项工作的合适人选,但独立处理轴并且缩放到完整的数据范围,无论轴限制是什么。

Lev*_*sky 2

您的意思是检查数据很麻烦是什么意思?如果就编写代码而言,那么还不错。尝试类似的东西

pylab.ylim(numpy.min(data), numpy.max(data))
Run Code Online (Sandbox Code Playgroud)

……哪里data可以numpy.arange(100)[0:11]

在一般情况下,如果你有xdataand ydata(但假设它们已排序)你将不得不这样做

from bisect import bisect
sub_ydata = ydata[bisect(xdata, xmin):bisect(xdata, xmax)]
pylab.ylim(numpy.min(sub_ydata), numpy.max(sub_ydata))
Run Code Online (Sandbox Code Playgroud)

如果你的意思是这在计算上是一件困难的事情,那么我真的不明白matplotlib如果没有这样的计算如何执行它。