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)
这使: 
这工作正常。但是,如果我只想查看从 x=0 到 x=10 的部分,y 缩放就搞砸了:
pylab.plot(numpy.arange(100)**2.0)
pylab.xlim(0,10)
Run Code Online (Sandbox Code Playgroud)
这使:
.
在前一种情况下,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做了一些缩放,似乎是这项工作的合适人选,但独立处理轴并且只缩放到完整的数据范围,无论轴限制是什么。
您的意思是检查数据很麻烦是什么意思?如果就编写代码而言,那么还不错。尝试类似的东西
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如果没有这样的计算如何执行它。