我尝试使用以下代码生成动画:
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)
有人知道那里发生了什么以及如何解决问题?
答案 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.