所以,我学会了如何在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并将它们拼接在一起)?
答案 0 :(得分:8)
简而言之,除了使用外部工具之外没有别的办法。 1.1.0中有一个新模块可帮助您执行animations并将其保存为mpeg4格式。它使用外部工具自动执行此转换,从许多帧到单个影片。你可以使用imagemagick转换来制作你的gif,或者使用ffmpeg或mencoder,这是新动画模块提供的两个选项。
答案 1 :(得分: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()
可爱,嗯?