使用imshow显示连续的图像/数组作为python中的重复动画

时间:2013-09-11 14:16:56

标签: python arrays animation matplotlib

我计算了一些结果,它们采用64x64数组的形式。每个阵列都是在另一个阵列之后创建的。我想一个接一个地显示这些数组,就像动画一样。 我尝试了很多方法,但没有工作。我非常沮丧,关于动画的SO问题无法帮助我实现这一点。这不是我第一次尝试这个,每次我的结果都是一样的:我从来没有让这个工作。

我尝试过的方法:

dynamic image

dynamic image 2

simple animation

我目前的代码:

fig, ax = plt.subplots()
def animate(i):
    return imagelist[i] 
def init():
    fig.set_data([],[])
    return fig
ani = animation.FuncAnimation(fig, animate, np.arange(0, 19), init_func=init,
interval=20, blit=True)
plt.show()

这里imagelist是我上面提到的数组列表(长度20,0到19)。我的问题是我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:5)

几乎完全从您的第一个link复制(并添加一些评论):

hmpf = ones([4,4])
hmpf[2][1] = 0
imagelist = [ hmpf*i*255./19. for i in range(20) ]

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure() # make figure

# make axesimage object
# the vmin and vmax here are very important to get the color map correct
im = plt.imshow(imagelist[0], cmap=plt.get_cmap('jet'), vmin=0, vmax=255)

# function to update figure
def updatefig(j):
    # set the data in the axesimage object
    im.set_array(imagelist[j])
    # return the artists set
    return [im]
# kick off the animation
ani = animation.FuncAnimation(fig, updatefig, frames=range(20), 
                              interval=50, blit=True)
plt.show()

这就像我期望的那样动画

答案 1 :(得分:2)

您是否在Spyder的交互式python会话中运行?如果是这样,您可能需要运行

    %matplotlib qt

确保动画在自己的窗口中打开,而不是内联显示(它不能内联工作)。

另外,请确保您没有the calling animation.FuncAnimation inside a function issue

答案 2 :(得分:1)

我实现了一个适合您需求的方便脚本。试一试here

对于你的例子:

imagelist = YOUR-IMAGE-LIST
def redraw_fn(f, axes):
    img = imagelist[f]
    if not redraw_fn.initialized:
        redraw_fn.im = axes.imshow(img, animated=True)
        redraw_fn.initialized = True
    else:
        redraw_fn.im.set_array(img)
redraw_fn.initialized = False

videofig(len(imagelist), redraw_fn, play_fps=30)