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



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

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 orgif`文件中(通过取消注释相应的代码行),我会收到以下错误消息:

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

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

文档指出,如果您没有在Animation.save中指定专用写入程序,它将使用animation.writer的rcParam值。我假设您的matplotlib安装没有为该参数指定正确的值,因此出现了错误。

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

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

我在尝试运行时遇到了同样的问题

ani = matplotlib.animation.FuncAnimation(...)
ani.save("out.gif", writer="imagemagick", dpi=80,fps=10)

在windows机器上使用matplotlib 1.5。

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

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

相关内容

  • 没有找到相关文章

最新更新