【发布时间】:2016-05-08 18:31:38
【问题描述】:
我搜索了其他类似的问题,但这并没有解决我的问题。下面是一个简单的代码,在matplotlib中以gif图像的形式生成动画:
import numpy as np
import matplotlib.pylab as plt
import matplotlib.animation as anm
fig = plt.figure()
def draw(i):
x = np.linspace(0, 5, num = 1000)
y = np.sin(x-i*0.1)
plt.clf()
plt.plot(x, y, 'r-')
anim = anm.FuncAnimation(fig, draw, frames = 10, interval = 500, repeat = False)
anim.save('test.gif', fps = 1, writer = 'imagemagick')
这会生成我想要的动画,但是一旦我打开最终图像(使用 eog),它就会不断重复。由于我将在演示文稿中展示动画,因此我希望它在展示一次后停止。如您所见,我在 FuncAnimation 中添加了repeat = False,但这并没有停止重复图像。我的代码有什么问题?
提前致谢
【问题讨论】:
-
这没有很好的记录 - 但请尝试将
extra_args=['-loop','1']添加到对save的调用中,例如anim.save('test.gif', fps = 1, writer = 'imagemagick',extra_args=['-loop','1'])。如果可行,我会将其添加为完整答案,但目前我不确定,也没有imagemagick可以检查。extra_args直接传递给图像编码器。 -
没有。不幸的是,它不起作用。
-
你能让它产生一些调试输出来找到它正在运行的 ImageMagick 命令吗?它可能包含单词
convert。或者,您可以运行它同时尝试while :; do ps -aef | grep "convert" | grep "test.gif"; done -
也许您可以将文件作为 PNG 文件写入磁盘,然后自己使用 ImageMagick 和
convert frame*png -loop 1 animation.gif -
@SnehalShekatkar Arggh - 在源代码中找到了必要的行,看起来他们对
-loop 0进行了硬编码:请参阅this line 我认为这可能是一个错误,因为该工具无论如何都将其默认为零。我认为正因为如此,任何用户指定的-loop都将被忽略。我认为你必须按照@marksetchell 输出帧并手动转换,如果你不希望它循环:(
标签: python animation matplotlib gif