python3 - python 2d plot



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

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

所以,我学会了如何在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和拼接在一起)?


Answer #1

如果你使用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()

可爱,呃?





matplotlib