54

我正在使用 matplotlib 在 Python 中绘制数据。我正在根据一些计算更新绘图数据,并希望 ylim 和 xlim 自动重新缩放。相反,发生的事情是根据初始图的限制设置比例。MWE 是

import random
import matplotlib.pyplot as pyplot

pyplot.ion()

x = range(10)
y = lambda m: [m*random.random() for i in range(10)]

pLine, = pyplot.plot(x, y(1))

for i in range(10):
    pLine.set_ydata(y(i+1))
    pyplot.draw()

第一个绘图命令从中生成一个绘图[0,1],我可以看到一切都很好。最后,y 数据数组的[0,10)大部分大于1,但该图的 y 限制仍然存在[0,1]

我知道我可以使用 手动更改限制pyplot.ylim(...),但我不知道将它们更改为什么。在for循环中,我可以告诉 pyplot 缩放限制,就好像它是第一次被绘制一样?

4

1 回答 1

73

您将需要更新坐标区的 dataLim,然后根据 dataLim 更新坐标区的 viewLim。适当的方法是axes.relim()ax.autoscale_view()方法。您的示例如下所示:

import random
import matplotlib.pyplot as pyplot

pyplot.ion()

x = range(10)
y = lambda m: [m*random.random() for i in range(10)]

pLine, = pyplot.plot(x, y(1))

for i in range(10):
    pLine.set_ydata(y(i+1))

ax = pyplot.gca()

# recompute the ax.dataLim
ax.relim()
# update ax.viewLim using the new dataLim
ax.autoscale_view()
pyplot.draw()
于 2012-06-14T18:34:45.920 回答