2016-10-14 55 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], fignum=0) 

またはその代わり

plot = plt.imshow(data[0]) 

を使用する

plot = plt.matshow(data[0]) 

を変更してください。 fignumパラメータが(デフォルトでNoneにすなわち等しい)空白のままにされている場合


ここplt.matshow(data[0])を使用に伴う問題は、それcreates a new figureことです。 fig = plt.figure()が呼び出されてからfigFuncAnimationに渡されると、結果はplt.matshowの結果とFuncAnimationの2つの数字が表示されます。 FuncAnimationが描画されている図形は、最初の描画を見つけることができませんので、それは発生します

AttributeError: draw_artist can only be used after an initial draw which caches the render 
関連する問題