Matplotlib 动画 - 如何将其导出为可用于演示的格式?

6 投票
2 回答
12016 浏览
提问于 2025-04-17 08:27

我学会了如何在matplotlib中制作可爱的动画。例如,这个:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

plt.ion()

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)
line, = ax.plot(t,x, '-')
fig.canvas.draw()
for i in xrange(100):
    x = (1-q) * x + q* np.random.normal(size = len(t))
    line.set_ydata(x)
    fig.canvas.draw()

这个动画效果很好,很不错。但是我想知道如何把它做成一个可以展示的电影,比如在PDF演示文稿中使用?我试过用 fig.savefig("test.gif"),但出现了错误提示,说明matplotlib不支持导出gif格式。

有没有办法在不使用外部工具的情况下做到这一点(比如制作很多png图片然后拼接在一起)?

2 个回答

6

如果你使用 matplotlib.animation 这个库,并且你的电脑上有像 FFmpeg 这样的工具在路径里,那么这个代码应该可以正常运行:

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')
plt.show()

挺可爱的,对吧?

8

简单来说,除了使用外部工具,没有其他办法。在1.1.0版本中,有一个新模块可以帮助你制作动画并保存为mpeg4格式。这个模块会用外部工具自动把很多帧转换成一部电影。你可以使用imagemagick的convert命令来制作gif,或者使用ffmpegmencoder这两个选项,这些都是新动画模块提供的选择。

撰写回答