Подтвердить что ты не робот

Автоматически масштабировать 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 масштабирует пределы, как если бы он был впервые нанесен на график?

4b9b3361

Ответ 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()