matplotlib动画不与imshow关联

时间:2019-02-04 09:38:45

标签: python matplotlib animation imshow

我正在尝试使用imshow为一些简单的子图制作动画,但是显然存在问题。

这是我的问题的一个小演示:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation    

fig,axs=plt.subplots(2,5,figsize=(10,4))
imgs=[]

for row in axs:
    for col in row:
        col.set_xlim(4.5,-.5)
        col.set_ylim(4.5,-.5)
        col.set_xticks([])
        col.set_yticks([])

        #line A
        imgs.append(col.imshow([[]],animated=1))
        #freezes the animation([[]] is just a placeholder)

        #line B
        #imgs.append(col.imshow(np.arange(25).reshape((5,5)),animated=1))
        #animation does work if the above line is used instead

def func(frm):
    for i in range(10):
        imgs[i].set_array(np.arange(25).reshape(5,5)*np.log10(frm+1))
    return imgs
anim=animation.FuncAnimation(fig,func,10,interval=100)
plt.show()

如果我使用A行,动画将冻结,就像未执行 func 一样(实际上是),不会出现任何错误。如果改用B行,则动画将起作用。我是否缺少有关 imshow 动画制作的内容?

1 个答案:

答案 0 :(得分:0)

{p3}对象可以使用 subplots 命令生成的多个轴来创建多个 imshow 中的动画。

from numpy import random
from matplotlib import animation
import matplotlib.pyplot as plt

img_lst_1 = [random.random((368,1232)) for i in range(10)] # Test data
img_lst_2 = [random.random((368,1232)) for i in range(10)] # Test data

fig, (ax1, ax2) = plt.subplots(2,1)
frames = [] # store generated images
for i in range(len(img_lst_1)):
    
    img1 = ax1.imshow(img_lst_1[i], animated=True)
    img2 = ax2.imshow(img_lst_2[i], cmap='gray', animated=True)
    
    frames.append([img1, img2])

ani = animation.ArtistAnimation(fig, frames, interval=500, blit=True,
                                repeat_delay=1000)
ani.save('movie_example.mp4')

代码输出:

ArtistAnimation