Как анимировать выбор массива с помощью анимации matplotlib? - PullRequest
0 голосов
/ 26 октября 2018

Я учусь работать с функцией анимации matplotlib. Я взял учебник из matplotlib и немного изменился. Пока что я могу показать свой полный массив (список) длиной 10. (см. Код)

Моя цель - видеть в каждом кадре только, например, 3 значения из массива одновременно. В следующем кадре «окно» должно скользить с размером шага 1 индекса, чтобы «старые» значения переместились влево, а справа - «более новые» значения:

1-й кадр - см. Список значений [3], список [2], список [1] ​​из массива

2-й кадр - см. Список значений [4], список [3], список [2] из массива

3-й кадр - см. Список значений [5], список [4], список [3] из массива

....

Базовый код из учебника matplotlib, немного измененный, чтобы показать мой полный массив (список), но без обновления.

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

fig, ax = plt.subplots()
list = np.array([1,8,3,4,5,3,2,1,5,1])
line, = ax.plot(np.random.rand(10))
ax.set_ylim(0, 10)


def update(data):
    line.set_ydata(data)
    return line,

def data_gen():
    while True:
        #yield np.random.rand(4)
        yield list

ani = animation.FuncAnimation(fig, update, data_gen, interval=500)
plt.show()

Я не знаю, как я могу «сдвинуть» свое окно и затем обновить анимацию. Вероятно, с циклом for над индексом кадров, я думаю ...?

Какая переменная состоит из индекса фреймов?

Огромное спасибо за ваше время. Хороших выходных!

1 Ответ

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

Я не знаю, что вы пытались сделать со своим генератором, но я думаю, что это то, что вы пытаетесь сделать?

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

point_to_show = 3
my_list = np.array([1,8,3,4,5,3,2,1,5,1])

fig, ax = plt.subplots()
line, = ax.plot(range(point_to_show),np.zeros(point_to_show)*np.NaN, 'ro-')
ax.set_ylim(0, 10)
ax.set_xlim(0, point_to_show-1)

def update(i):
    new_data = my_list[i:i+point_to_show]
    line.set_ydata(new_data)
    return line,

ani = animation.FuncAnimation(fig, update, frames=len(my_list)-point_to_show, interval=500)
plt.show()

enter image description here

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