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

Matplotlib y轴限制在设置x轴限制后不更新?,plot,matplotlib,python-2.7,Plot,Matplotlib,Python 2.7,我试图绘制一些数据的子集,但在设置x轴限制后,y轴限制没有正确更新。是否有办法让matplotlib在设置x轴限制后更新y轴限制 例如,考虑下面的情节: import numpy import pylab pylab.plot(numpy.arange(100)**2.0) 其中: 这很好用。但是,如果我只想查看x=0到x=10之间的零件,则y比例会出现混乱: pylab.plot(numpy.arange(100)**2.0) pylab.xlim(0,10) 其中给出: 在前一种情况下,

我试图绘制一些数据的子集,但在设置x轴限制后,y轴限制没有正确更新。是否有办法让matplotlib在设置x轴限制后更新y轴限制

例如,考虑下面的情节:

import numpy
import pylab
pylab.plot(numpy.arange(100)**2.0)
其中:

这很好用。但是,如果我只想查看x=0到x=10之间的零件,则y比例会出现混乱:

pylab.plot(numpy.arange(100)**2.0)
pylab.xlim(0,10)
其中给出:

在前一种情况下,x轴和y轴的比例正确,在后一种情况下,y轴的比例仍然相同,即使数据未打印。如何让matplotlib更新y轴比例

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

更新:

上述示例已简化,在更一般的情况下:

pylab.plot(xdata, ydata1)
pylab.plot(xdata, ydata2)
pylab.plot(xdata, ydata3)
pylab.xlim(xmin, xmax)
当然可以手动设置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)

subidx=N.argwhere((扩展数据>=xmin)和(扩展数据在什么意义上,你是说检查数据很麻烦?如果在编写代码方面,那就没那么糟糕了。试试类似的方法

pylab.ylim(numpy.min(data), numpy.max(data))
from bisect import bisect
sub_ydata = ydata[bisect(xdata, xmin):bisect(xdata, xmax)]
pylab.ylim(numpy.min(sub_ydata), numpy.max(sub_ydata))
…其中,
数据可以是
numpy.arange(100)[0:11]

在一般情况下,如果您有
xdata
ydata
(但假设它们是排序的),那么您必须这样做

pylab.ylim(numpy.min(data), numpy.max(data))
from bisect import bisect
sub_ydata = ydata[bisect(xdata, xmin):bisect(xdata, xmax)]
pylab.ylim(numpy.min(sub_ydata), numpy.max(sub_ydata))

如果你的意思是计算起来很难,那么我真的不明白
matplotlib
如何在没有这种计算的情况下执行它。

我不是说计算起来很难,我只是想知道matplotlib是否/如何能够自行更新轴。显然,如果绘制完整的数据范围,matplotlib可以正确地获得轴范围,但是当你更新一个轴范围时,它不那么合乎逻辑。在一般情况下,当你有XDATA和YDATA时,手动设置东西变得更加麻烦。逻辑是一旦手动调整限制,自动缩放就停止了。这是有意义的;考虑到如果你不想要某些原因,它会多么恼人。matplotlib可以自动调整,但它会。一般情况不会更糟,让我添加一个简短的示例来说明我的意思。我同意自动缩放可能会干扰手动缩放,但我不同意这种情况。特别是如果我在打印前设置xrange,我希望matplotlib会相应地更改Y范围。Gnuplot d例如,在任何情况下,我都假设我的问题的答案是“否”,所以谢谢:)啊,我发现它似乎做了我想做的事情!不,等等,
autoscale()
也会忽略任何轴限制,只查看提供给
plot()的数据
。这本可以很好地解决这个问题,但事实并非如此,唉。我仍然不太相信Matplotlib做不到这一点。