Как сделать анимацию jupyter HTML-matplotlib с помощью тепловой карты Seaborn? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь заставить 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/

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете переключать «цветную панель».Из документации Seaborn.heatmap необходимо изменить sns.heatmap(data, ax=ax_global) на sns.heatmap(data, ax=ax_global, cbar=False), а также сделать то же самое внутри init_heatmap().

...