我计算了一些结果,它们采用64x64数组的形式。每个阵列都是在另一个阵列之后创建的。我想一个接一个地显示这些数组,就像动画一样。 我尝试了很多方法,但没有工作。我非常沮丧,关于动画的SO问题无法帮助我实现这一点。这不是我第一次尝试这个,每次我的结果都是一样的:我从来没有让这个工作。
我尝试过的方法:
我目前的代码:
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)。我的问题是我怎样才能让它发挥作用?
答案 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)