2015-11-16 28 views
6

Sono relativamente nuovo a Python (proveniente da MATLAB). Come un progetto, sto cercando di creare una trama animata di una matrice di correlazione nel tempo. Per rendere le trame piacevoli, sto cercando Seaborn. Ho lottato ottenere animazione fatto a tutti (problemi con matplotlib backend su un Mac), ma un'animazione molto di base ora funziona utilizzando questo codice dal web:matrice di calore animate/matrice di correlazione marina n.

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

nx = 50 
ny = 50 

fig = plt.figure() 
data = np.random.rand(nx, ny) 
im = plt.imshow(data) 

def init(): 
    im.set_data(np.zeros((nx, ny))) 

def animate(i): 
    #xi = i // ny 
    #yi = i % ny 
    data = np.random.rand(nx, ny) 
    im.set_data(data) 
    return im 

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=50, repeat = False) 

Ora stavo cercando di adattare questo a Seaborn, ma non ha avuto successo Sembra che Seaborn lavori su sottotrame e animarli è molto più difficile. La cosa migliore che ho avuto una volta è stata una specie di trama ricorsiva, in cui le mappe di Seaborn.heat sono state tracciate l'una sull'altra. Inoltre, il metodo im.set_data non era disponibile. Qualsiasi suggerimento è molto apprezzato. Grazie mille.

Best, Ralf.

+0

Suppongo che sarebbe utile vedere il codice che utilizza Seaborn? – mwaskom

risposta

2

buon punto, mwaskom (grazie per tutto il lavoro in sns!) - ecco dove sono bloccato. Ho sostituito plt.imshow (i dati di casting via set_data non funzionavano) con seaborn.heatmap.

fig = plt.figure() 
data = np.random.rand(nx, ny) 
sns.heatmap(data, vmax=.8, square=True) 

def init(): 
     sns.heatmap(np.zeros((nx, ny)), vmax=.8, square=True) 

def animate(i): 
    data = np.random.rand(nx, ny) 
    sns.heatmap(data, vmax=.8, square=True) 

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=20, repeat = False) 

questo crea la trama ricorsiva con cui lotto. grazie per l'aiuto, rendendo la trama più carina, e speriamo presto anche più facile! Best, Ralf.

+1

penso di aver appena trovato una soluzione: mettere un plt.clf() nella prima riga della funzione animate funziona per ora! Grazie, Ralf. –