Чтение документации FuncAnimation
,
FuncAnimation(fig, func, frames=None, ...)
func
: вызываемое Функция, вызываемая в каждом кадре. Первым аргументом будет следующее значение в frames
.Любые дополнительные позиционные аргументы могут быть предоставлены через параметр fargs.
[...]
frames
: итерируемый, int, функция генератора или None, необязательный источник данных для передачи функциии каждый кадр анимации
Если итеративный, то просто используйте предоставленные значения.Если итеративное значение имеет длину, оно переопределит kwarg save_count.
Если целое число, то эквивалентно диапазону пропускания (в кадрах)
Если функция-генератор, то должна иметь сигнатуру:
def gen_function() -> obj
Если нет, то эквивалентно прохождению itertools.count
.
(выделение минное)
Таким образом, функция анимации должнапринять аргумент, который он сгенерировал с помощью любого frames
Если frames = None
, как в случае, когда вы не предоставляете этот аргумент, это будут просто целые числа, начиная с 0
и считая до остановки анимации.
Чтобы увидеть аргумент вДействие попробуйте что-то вроде
def animate(t):
print(t)
ani = FuncAnimation(fig,animate,interval=1000)
plt.show()
или
def animate(t):
print(t)
ani = FuncAnimation(fig,animate,frames=[23,56,129], interval=1000)
plt.show()
Что касается кода в вопросе, я не уверен, чего он должен достичь, но я думаю, вы былучше выполнить анимацию над столбцами y
.
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x = np.random.normal(0,1,[1000,1])
y = np.random.normal(0,1,[1000,10])
def animate(t):
ax.clear()
ax.scatter(x,y[:,t])
ani = FuncAnimation(fig, animate, frames=10, interval=1000)
plt.show()