Функция обновления FuncAnimation не вызывается - PullRequest
0 голосов
/ 12 октября 2018

Я не совсем понимаю, как создать класс для анимации данных.Вот суть:

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

x = np.arange(100).reshape((100, 1))
y = np.random.randn(100, 1)
xy = np.hstack((x, y))


class PlotData:
    def __init__(self):
        fig, ax = plt.subplots()
        fig.set_size_inches((11, 9))
        self.fig = fig
        self.ax = ax
        self.ln0, = ax.plot([], [])

    def init(self):
        self.ln0.set_data([], [])
        return(self.ln0, )

    def update(self, frame_no):
        data = xy[0:frame_no + 1]
        self.ln0.set_data(data[:, 0], data[:, 1])
        return(self.ln0, )


if __name__ == '__main__':
    my_plot = PlotData()
    anim = animation.FuncAnimation(my_plot.fig, my_plot.update,
                                   init_func=my_plot.init, blit=True,
                                   frames=99, interval=50)
    plt.show()

Это производит только вывод метода init , но не обновление, поэтому получается пустой график без анимации.Что происходит?

1 Ответ

0 голосов
/ 12 октября 2018

Для меня ваш код работает отлично.Единственная проблема заключается в том, что большая часть данных выходит за пределы графика.Если вы отрегулируете пределы графика следующим образом:

class PlotData:
    def __init__(self):
        fig, ax = plt.subplots(figsize = (11,9))
        self.fig = fig
        self.ax = ax
        self.ax.set_xlim([0,100])
        self.ax.set_ylim([-3,3])
        self.ln0, = ax.plot([], [])

Линия анимирована просто отлично.Если вы хотите, чтобы x- и y-ограничения корректировались автоматически, см. этот вопрос о том, как это сделать.Однако, если я правильно помню, это будет правильно работать только с blit=False.

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