首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多个图像序列的子图进行动画处理

问对多个图像序列的子图进行动画处理
EN

Stack Overflow用户
提问于 2021-10-12 16:31:44
回答 2查看 29关注 0票数 0

大多数关于matplotlib项目动画的问题都详细描述了以线条格式绘制数据,这似乎不适用于图像。

我有三个系列的图像,我想在子图中显示,并动画图形显示系列中的每一项。目前,我使用子图创建图形,并在for循环中生成要在动画中显示的图形列表。我使用的是jupyter笔记本,所以我将其导出为jshtml框架。我的代码:

代码语言:javascript
复制
fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3,
                                    figsize=(12, 6))
fis = []
for i in range(0,len(filename_list),4): #show every 4th image in series

    ax0.set_title('Raw image')
    ax0.imshow(plt.imread(filename_list[i]),animated=True)
    ax1.set_title('Manually cropped image')
    ax1.imshow(plt.imread(  (filename_list[i].parent / 'cropped' /filename_list[i].name)  ) ,animated=True)
    ax2.set_title('Cropped image after re-centering')
    ax2.imshow(plt.imread(  (filename_list[i].parent / 'cropped_corr' /filename_list[i].name)  ) ,animated=True)

    fis.append([fig])

ani = animation.ArtistAnimation(fig, fis, interval=500, blit=False, repeat_delay=1000)
plt.close()

HTML(ani.to_jshtml())

这会产生一个有效的jshtml动画,但是子情节不会改变。我怎样才能使其动画化,以致于更新子图?我不知道如何制作一个更新每一帧的动画函数。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2021-10-12 16:53:07

在发布后不久,我重新检查了在动画中只创建一个图像的代码。我突然想到,我需要将每个imshow命令设置为一个添加到图形列表中的变量。代码变成:

代码语言:javascript
复制
fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3,
                                    figsize=(12, 6))
fis = []
for i in range(0,len(filename_list),4):

    ax0.set_title('Raw image')
    im0=ax0.imshow(plt.imread(filename_list[i]),animated=True)
    ax1.set_title('Manually cropped image')
    im1=ax1.imshow(plt.imread(  (filename_list[i].parent / 'cropped' /filename_list[i].name)  ) ,animated=True)
    ax2.set_title('Cropped image after re-centering')
    im2=ax2.imshow(plt.imread(  (filename_list[i].parent / 'cropped_corr' /filename_list[i].name)  ) ,animated=True)

    fis.append([im0,im1,im2])

ani = animation.ArtistAnimation(fig, fis, interval=500, blit=False, repeat_delay=1000)
plt.close()

HTML(ani.to_jshtml())

注意,在每个imshow调用中添加了im0、im1和im2,并在fis.append命令中创建了一个列表列表。

票数 0
EN

Stack Overflow用户

发布于 2021-10-12 16:54:06

代码语言:javascript
复制
from IPython.display import clear_output
fis = []
for i in range(0,len(filename_list),4): #show every 4th image in series
    fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3, figsize=(12, 6), num = 1, clear = True)
    ax0.set_title('Raw image')
    ax0.imshow(plt.imread(filename_list[i]),animated=True)
    ax1.set_title('Manually cropped image')
    ax1.imshow(plt.imread(  (filename_list[i].parent / 'cropped' /filename_list[i].name)  ) ,animated=True)
    ax2.set_title('Cropped image after re-centering')
    ax2.imshow(plt.imread(  (filename_list[i].parent / 'cropped_corr' /filename_list[i].name)  ) ,animated=True)
    plt.show()

    fis.append([fig])
    clear_output()

ani = animation.ArtistAnimation(fig, fis, interval=500, blit=False, repeat_delay=1000)

HTML(ani.to_jshtml())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69544033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档