У меня есть 3D-матрица формы (100,50,50), например,
import numpy as np
data = np.random.random(100,50,50)
И я хочу создать анимацию, которая показывает каждый из 2D-срезов размером (50,50) в видетепловая карта или imshow
например:
import matplotlib.pyplot as plt
plt.imshow(data[0,:,:])
plt.show()
будет отображать 1-й кадр этой анимации.Я хотел бы также иметь этот дисплей в ноутбуке Jupyter.В настоящее время я следую этому учебнику для встроенной анимации ноутбука, отображаемой в виде html-видео, но я не могу понять, как заменить данные 1D-строки на фрагмент моего 2D-массива.
Я знаю, что мне нужно создать элемент сюжета, функцию инициализации и функцию анимации.Следуя этому примеру, я попытался:
fig, ax = plt.subplots()
ax.set_xlim((0, 50))
ax.set_ylim((0, 50))
im, = ax.imshow([])
def init():
im.set_data([])
return (im,)
# animation function. This is called sequentially
def animate(i):
data_slice = data[i,:,:]
im.set_data(i)
return (im,)
# call the animator. blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=100, interval=20, blit=True)
HTML(anim.to_html5_video())
Но я получаю различные ошибки, что бы я ни пытался, в основном связанные со строкой im, = ax.imshow([])
Любая помощь приветствуется!