我无法找到解决方案的部分原因可能是我不知道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]
作为图片。我怎么能这样做?
如果失败了,我该如何保存特定的框架?
(我想这样做而不创建两次图,我知道这是一个后备解决方案。)
答案 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