Я пытаюсь заставить HTML(anim.to_html5_video)
анимацию работать в jupyter с тепловой картой морского происхождения.
- Сначала я получаю рабочие рабочие образцы из документации и делаю "чистый matplotlib" анимированный пример карты изображений, это сработало, с небольшой проблемой («выход паразита» в ячейке анимации)
- Затем я попытался заставить его работать с seaborn.heatmap … но не получилось.Анимация выглядит как «бесконечное зеркало» - очевидно, что-то не так с осями / композицией matplotlib, но я не могу ее получить.
Общая ячейка инициализации:
import pandas as pd
import seaborn as sns
import numpy as np
%matplotlib inline
#%matplotlib notebook # Tried both, not needed for animation.
import matplotlib.pyplot as plt
from matplotlib import animation, rc
from IPython.display import HTML
Анимация сработала, но «существует нежелательный статический выходной образ»:
fig, ax = plt.subplots()
nx = 50
ny = 50
line2d, = ax.plot([], [], lw=2)
def init():
line2d.set_data([], [])
ax.imshow(np.zeros((nx, ny)))
return (line2d,)
def animate(i):
data = np.random.rand(nx, ny)
ax.set_title('i: ' + str(i))
ax.imshow(data)
return (line2d,)
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=10, interval=1000, blit=False)
HTML(anim.to_html5_video())
Итак, все в порядке с моей настройкой jupyter (пакетами, ffmpeg и т. д.).
Но я не могу понять, каксделайте это с seaborn.heatmap:
fig, ax = plt.subplots()
nx = 50
ny = 50
line2d, = ax.plot([], [], lw=2)
ax_global = ax
def init_heatmap():
line2d.set_data([], [])
sns.heatmap(np.zeros((nx, ny)), ax=ax_global)
return (line2d,)
def animate_heatmap(i):
data = np.random.rand(nx, ny)
sns.heatmap(data, ax=ax_global)
ax.set_title('Frame: ' + str(i))
return (line2d,)
anim = animation.FuncAnimation(fig, animate_heatmap, init_func=init_heatmap,
frames=10, interval=1000, blit=True)
HTML(anim.to_html5_video())
Оба образца готовы к тесту на github
Конечно, я хочу видеть анимацию со случайной картой и "стабильным теплом"ось ", но получите это https://vimeo.com/298786185/