matplotlib在gif错误中保存动画

use*_*298 8 animation matplotlib gif

我想以gif格式保存matplotlib动画.

我成功地使用代码将动画保存为mp4格式

import matplotlib
matplotlib.use("Agg")

~some codes~

ani = animation.FuncAnimation(fig, draw, update, interval=10, blit=False)
mywriter = animation.FFMpegWriter(fps=60)
ani.save('myanimation.mp4',writer=mywriter)
Run Code Online (Sandbox Code Playgroud)

但如果我将myanimation.mp4更改为gif格式,python会出错

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\edison\Edison_v4_backup_1\ver5.py", line 164, in <module>
    ani.save('demoanimation.gif',writer=mywriter);
  File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 718, in save
    writer.grab_frame(**savefig_kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 204, in grab_frame
    dpi=self.dpi, **savefig_kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1421, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 2220, in print_figure
    **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 497, in print_raw
    renderer._renderer.write_rgba(filename_or_obj)
RuntimeError: Error writing to file
Run Code Online (Sandbox Code Playgroud)

看到我成功保存为mp4格式,我不知道为什么它在保存gif格式时会出错.

DrV*_*DrV 18

这是因为matplotlib没有外部程序不支持GIF.如果您已imagemagick正确安装和配置,这应该工作:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np


def init_animation():
    global line
    line, = ax.plot(x, np.zeros_like(x))
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1,1)

def animate(i):
    line.set_ydata(np.sin(2*np.pi*i / 50)*np.sin(x))
    return line,

fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 2*np.pi, 200)

ani = matplotlib.animation.FuncAnimation(fig, animate, init_func=init_animation, frames=50)
ani.save('/tmp/animation.gif', writer='imagemagick', fps=30)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


pdm*_*pdm 5

提醒一下,在使用MatplotlibImageMagick将图像或视频转换为gif之前,您需要修改Matplotlib的配置并添加ImageMagick的path

以下代码将向您展示Matplotlib的配置文件路径

import matplotlib
matplotlib.matplotlib_fname()
Run Code Online (Sandbox Code Playgroud)

对我来说,道路是

C:\Anaconda\lib\site-packages\matplotlib\mpl-data\matplotlibrc
Run Code Online (Sandbox Code Playgroud)

然后改变 animation.convert_path

#animation.convert_path: 'convert' # Path to ImageMagick's convert binary.
                                   # On Windows use the full path since convert
                                   # is also the name of a system tool.
Run Code Online (Sandbox Code Playgroud)

通过向其添加convert.exe路径

animation.convert_path: C:\Program Files\ImageMagick-6.9.2-Q16-HDRI\convert.exe
Run Code Online (Sandbox Code Playgroud)

不要忘记删除#之前的内容animation.convert_path

经过上述修改后,Matplotlib和ImageMagick将可以完美工作并输出所需的gif文件。

例子gif

希望能帮助到你。