我尝试使用以下代码生成动画:
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)
有人知道那里发生了什么以及如何解决这个问题吗?
文档指出,如果您没有在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.