Matplotlib保存个人" ims" (动画部分)作为图像

时间:2015-09-12 12:22:09

标签: python matplotlib

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

说我有这个无聊的动画(documentation):

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]作为图片。我怎么能这样做?

如果失败了,我该如何保存特定的框架?

(我想这样做而不创建两次图,我知道这是一个后备解决方案。)

1 个答案:

答案 0 :(得分:1)

ArtistAnimation的工作方式是拥有一个艺术家列表,然后控制它们的可见性以创建动画。只与其中一位艺术家合作,只需假装这种行为。

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()

首先你必须停止动画。

del im_ani # this _should_ stop the animation by letting the gc do it's job

或者只是关闭这个数字应该有用。

辅助函数类似于:

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))

并调用函数

save_single_frame(fig, ims, 5)  # this should save the animation for you