首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matplotlib将单个"ims“(动画部分)保存为图像

Matplotlib将单个"ims“(动画部分)保存为图像
EN

Stack Overflow用户
提问于 2015-09-12 12:22:08
回答 1查看 238关注 0票数 1

我找不到解决方案的部分原因可能是我不知道ims是什么;它们在打印时被称为lines.Line2D

假设我有一个无聊的动画(文档):

代码语言:javascript
运行
复制
x = linspace(0, 2, 100)
f = lambda x: 2**x
fig, ax = subplots()
ims = []
for delta in range(15):
    ims.append([
        ax.plot(x, f(x) + delta, c = 'r')[0], 
        ax.plot(x, (f(x) + delta)**2, c = 'b')[0]
    ])
im_ani = ArtistAnimation(fig, ims)
show()

现在我想将第二行从一个特定的帧中保存下来,例如ims[-1][1]作为一个图像。我该怎么做?

如果不这样做,我如何才能保存特定的框架?

(我想在不创建两次情节的情况下这样做,我知道这是一个后备解决方案。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-12 19:31:33

ArtistAnimation的工作方式是有一个艺术家列表,然后控制他们的可见性来创建动画。要想与其中一位艺术家合影,就得假装出这种行为。

代码语言:javascript
运行
复制
x = linspace(0, 2, 100)
f = lambda x: 2**x
fig, ax = subplots()
ims = []
for delta in range(15):
    ims.append(list(ax.plot(x, f(x) + delta, c='r') +  
                    ax.plot(x, (f(x) + delta)**2, c='b'))
    )
im_ani = ArtistAnimation(fig, ims)
show()

首先你必须停止动画。

代码语言:javascript
运行
复制
del im_ani # this _should_ stop the animation by letting the gc do it's job

或者仅仅是关闭这个数字就可以了。

帮助者的功能类似于:

代码语言:javascript
运行
复制
def save_single_frame(fig, arts, frame_number, artist_number=-1):
    # make sure everything is hidden
    for frame_arts in arts:
        for art in frame_arts:
            art.set_visible(False)
    # make the one artist we want visible
    arts[frame_number][artist_number].set_visible(True)
    fig.savefig("frame_{}.png".format(frame_number))

并调用该函数

代码语言:javascript
运行
复制
save_single_frame(fig, ims, 5)  # this should save the animation for you
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32538728

复制
相关文章

相似问题

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