保存matplotlib动画时为什么会出现UnicodeDecodeError?

时间:2015-12-11 15:19:47

标签: python animation matplotlib

我尝试使用以下代码生成动画:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation

fig = plt.figure() 
ax  = fig.add_subplot(111) 

ax.set_xlim(0, 1)
ax.set_ylim(-2,2)

dt = 0.01
q  = 0.01
t = np.arange(0,1,dt)
x = np.sin(2*np.pi*t)
images = []

for i in xrange(100):
    x = (1-q) * x + q* np.random.normal(size = len(t))
    line, = ax.plot(t,x, '-')
    images.append((line,))

line_anim = ArtistAnimation(fig, images, interval=50, blit=True)

#line_anim.save('my_animation.mp4')
#line_anim.save('my_animation.gif')

plt.show()

工作正常。我看到了我希望看到的动画。但是,如果我尝试将其保存到``mp4 or gif`文件中(通过取消注释代码的相应行),我会收到以下错误消息:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x84 in position 5: ordinal
not in range(128)

有人知道那里发生了什么以及如何解决问题?

2 个答案:

答案 0 :(得分:0)

文档说如果你没有在Animation.save中指定专用编写器,它会使用animation.writer的rcParam值。我假设您的matplotlib安装没有为该参数指定正确的值,因此错误。

您应该在save方法中指定一个编写器(并且无论如何控制您的matplotlib安装):

line_anim.save('my_animation.mp4', writer = 'ffmpeg')

答案 1 :(得分:0)

我在尝试运行

时遇到了同样的问题
ani = matplotlib.animation.FuncAnimation(...)
ani.save("out.gif", writer="imagemagick", dpi=80,fps=10)

在使用matplotlib 1.5的Windows机器上。

问题是matplotlib想要调用imagemagick的convert二进制文件。但是在Windows中还有另一个标准工具convert可用,它被调用,其输出导致此unicode错误。为防止这种情况发生,imagemagick转换的完整路径需要通过"animation.convert_path" rcparam提供给matplotlib。

import matplotlib.pyplot as plt
plt.rcParams["animation.convert_path"] = r"D:\Programs\ImageMagick\convert.exe" 
                                            #or whatever the full path is.