Инициализация первого кадра matplotlib FuncAnimation как однородного цвета не дает анимации - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь сделать анимацию с помощью FuncAnimation и imshow из matplotlib. Я пытаюсь изменить анимацию некоторых состояний с течением времени. (Для удобства здесь они просто случайные) Я хочу, чтобы первый кадр этой анимации был полностью белым.

Однако, когда я инициализирую только нулями (полный белый цвет), анимация не работает (график только сохраняет белый цвет). Кажется, он работает только тогда, когда в первом кадре уже есть черные точки. Как создать анимацию, в которой первый кадр полностью белый?

Это код, который не может создать анимацию. Изменение x[0][:] = 0 на x[0][:] = 1 запустит анимацию, но даст этот ужасный первый кадр, от которого я хочу избавиться.

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

steps, length = 10, 10
s = (np.random.random_integers(0, 1, length) for _ in range(1000))
size = (steps, length)

x = np.zeros(size)
# Changing this to one, i.e. having non-uniform first frame, fixes animation.
x[0][:] = 0

fig = plt.figure()
ax = plt.axes()
im = ax.imshow(x, cmap="Greys", interpolation="none")

def init():
    return [im]

def animate(i):
    if i >= steps:
        global x
        x = np.roll(x, -1, axis=0)
        x[-1] = next(s)
    else:
        x[i] = next(s)
    im.set_array(x)
    return [im]

anim = animation.FuncAnimation(
    fig, animate, init_func=init, interval=1000, blit=True
)
plt.show()
...