2016-10-14 201 views
3

我有一個時間依賴的矩陣,我想將動畫演變爲動畫。matplotlib中的動畫matshow函數

我的代碼如下:

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


n_frames = 3 #Numero de ficheros que hemos generado 
data = np.empty(n_frames, dtype=object) #Almacena los datos 

#Leer todos los datos 
for k in range(n_frames): 
    data[k] = np.loadtxt("frame"+str(k)) 


fig = plt.figure() 
plot =plt.matshow(data[0]) 

def init(): 
    plot.set_data(data[0]) 
    return plot 

def update(j): 
    plot.set_data(data[j]) 
    return [plot] 


anim = FuncAnimation(fig, update, init_func = init, frames=n_frames, interval = 30, blit=True) 

plt.show() 

然而,當我運行它,我總是得到以下錯誤:draw_artist can only be used after an initial draw which caches the render。我不知道這個錯誤來自哪裏,也不知道如何解決它。 我已閱讀this answerthis article但仍然不知道爲什麼我的代碼不起作用。

任何幫助表示讚賞,謝謝!

回答

2

您非常接近工作解決方案。要麼改變

plot = plt.matshow(data[0]) 

plot = plt.matshow(data[0], fignum=0) 

或使用

plot = plt.imshow(data[0]) 

代替。


在這裏使用plt.matshow(data[0])的問題是,它creates a new figure如果fignum參數留空(即默認等於None)。 由於fig = plt.figure()被調用,並且fig傳遞給FuncAnimation,所以最後得到兩個數字,一個結果爲plt.matshow,另一個結果爲FuncAnimationFuncAnimation正在繪製的數字未找到初始繪製,因此它會增加

AttributeError: draw_artist can only be used after an initial draw which caches the render