2013-06-20 33 views
12

Znalazłem ten wspaniały krótki tutorial na animację:matplotlib imshow(): jak animować?

http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/

jednak nie mogę produkować animowany imshow() działce sam sposób. Próbowałem zastąpić niektóre linie:

# First set up the figure, the axis, and the plot element we want to animate 
fig = plt.figure() 
ax = plt.axes(xlim=(0, 10), ylim=(0, 10)) 
#line, = ax.plot([], [], lw=2) 
a=np.random.random((5,5)) 
im=plt.imshow(a,interpolation='none') 
# initialization function: plot the background of each frame 
def init(): 
    im.set_data(np.random.random((5,5))) 
    return im 

# animation function. This is called sequentially 
def animate(i): 
    a=im.get_array() 
    a=a*np.exp(-0.001*i) # exponential decay of the values 
    im.set_array(a) 
    return im 

ale napotkasz błędy możesz pomóc mi dostać ten bieg? z góry dziękuję. najlepszym

+1

Na marginesie, jest to dobra praktyka, aby zawierać błędy co otrzymujesz w swoim pytaniu. – tacaswell

Odpowiedz

12

Jesteś bardzo blisko, ale jest jeden błąd - init i animate powinien powrócić iterables zawierający artystów, które są animowane. Dlatego w wersji Jake'a zwracają one line, (która jest tak naprawdę krotką), a nie line (która jest obiektem pojedynczej linii). Niestety, dokumenty nie są jasne na ten temat!

można ustalić wersję tak:

# initialization function: plot the background of each frame 
def init(): 
    im.set_data(np.random.random((5,5))) 
    return [im] 

# animation function. This is called sequentially 
def animate(i): 
    a=im.get_array() 
    a=a*np.exp(-0.001*i) # exponential decay of the values 
    im.set_array(a) 
    return [im] 
+0

piękne! ta notacja z przecinkiem wprawiła mnie w zakłopotanie, ale to mi pomaga! – user1805743

+0

tak, uważam, że '[lista]' jest o wiele jaśniejsza –

Powiązane problemy