2013-06-20 3 views
12

я нашел этот замечательный краткий учебник по анимации:matplotlib imshow(): как оживить?

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

однако я не могу производить анимированный imshow() Заговор таким же образом. Я попытался заменить некоторые строки:

# 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 

, но я столкнулся с ошибками вы можете помочь мне получить это работает? благодарим вас заранее. лучше,

+1

Как примечание стороны, это хорошая практика, чтобы включать в себя, какие ошибки вы получаете в вашем вопросе. – tacaswell

ответ

12

Вы очень близки, но есть одна ошибка - init и animate должен возвращать итерируемыми, содержащий художников, которые в настоящее время оживленные. Вот почему в версии Джейка они возвращают line, (который на самом деле является кортежем), а не line (который представляет собой объект с одной строкой). К сожалению, документы не ясны по этому поводу!

Вы можете исправить свою версию, как это:

# 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

красивый! эта запятая нотация смутила меня раньше, но это помогает мне! – user1805743

+0

Да, я считаю, что '[list]' намного понятнее –

Смежные вопросы