Анимация Matplotlib: как динамически расширить пределы x? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть простой анимационный сюжет, подобный так:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 100), ylim=(0, 100))
line, = ax.plot([], [], lw=2)

x = []
y = []


# initialization function: plot the background of each frame
def init():
    line.set_data([], [])
    return line,


# animation function.  This is called sequentially
def animate(i):
    x.append(i + 1)
    y.append(10)
    line.set_data(x, y)
    return line,


# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=200, interval=20, blit=True)

plt.show()

Теперь, это работает хорошо, но я хочу, чтобы он расширился как один из вспомогательных сюжетов здесь http://www.roboticslab.ca/matplotlib-animation/, где x-ось динамически расширяется для размещения точек входящих данных.

Как мне это сделать?

1 Ответ

0 голосов
/ 07 мая 2019

Я столкнулся с этой проблемой (но для set_ylim), и у меня было несколько проб и ошибок с комментарием @ImportanceOfBeingErnest, и это то, что я получил, адаптированный к вопросу @ nz_21.

def animate(i):
    x.append(i + 1)
    y.append(10)
    ax.set_xlim(min(x), max(x)) #added ax attribute here
    line.set_data(x, y)

    return line, 

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=500, interval=20)

На самом деле в сети цитируется @ nz_21 существует аналогичное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...