Автоматически масштабировать ylim и xlim в Matplotlib
Я рисую данные в Python, используя matplotlib. Я обновляю данные графика на основе некоторых вычислений и хочу, чтобы 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()
Первая команда plot генерирует график из [0,1]
, и я вижу все в порядке. В конце массив y-data идет от [0,10)
, причем большая часть его больше, чем 1
, но у-пределы фигуры остаются [0,1]
.
Я знаю, что могу вручную изменить лимиты с помощью pyplot.ylim(...)
, но я не знаю, к чему их изменить. В цикле for
я могу сказать, что pyplot масштабирует пределы, как если бы он был впервые нанесен на график?
Ответы
Ответ 1
Вам нужно будет обновить dataLim осей, а затем обновить viewLim осей на основе dataLim. Методами approrpiate являются методы 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()