Matplotlib动画 - 如何将它们导出为在演示文稿中使用的格式?

Raf*_*ini 6 python animation matplotlib

所以,我学会了如何在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()
Run Code Online (Sandbox Code Playgroud)

这很有效,非常好.但是我如何使用它制作一部我可以在pdf演示中展示的电影?我试图做,fig.savefig("test.gif")但有一条错误消息表明matplotlib不导出GIF.

有没有办法在不借助外部工具的情况下做到这一点(比如制作大量的png并将它们拼接在一起)?

Yan*_*ann 8

简而言之,除了使用外部工具之外没有别的办法.1.1.0中有一个新模块可以帮助您制作动画并将其保存为mpeg4格式.它使用外部工具自动执行此转换,从许多帧到单个影片.你可以使用imagemagick的转换来制作你的gif,或者使用ffmpegmencoder,它们是新动画模块提供的两个选项.

  • 是的,所以我只是添加一个`fig.savefig("foo%d.png"%i)`来保存每一帧并使用mencoder? (2认同)

dan*_*van 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()
Run Code Online (Sandbox Code Playgroud)

可爱,是吗?