在Linux中保存一个matplotlibanimation

我在保存matplotlibanimation时遇到了问题。 当我执行下面的testing脚本时:

import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() ax = fig.add_subplot(111) ax.set_ylim([0,11]) ax.set_xlim([0,100]) u, v, ims = [], [], [] u.append(0) v.append(10) for i in range(100): u.append(i+1) v.append(10) ims.append(ax.plot(u, v, 'b-', linewidth=3.)) im_ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=3000, blit=True) im_ani.save('c.mp4') 

我得到以下错误:

 im_ani.save('c.mp4') File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 712, in save with writer.saving(self._fig, filename, dpi): AttributeError: 'str' object has no attribute 'saving' 

现在根据这个答案 ,我需要安装ffmpeg或libav-tools。 我试过这个,发现ffmpeg不可用,但是libav-tools似乎没有正确安装。 但是,当我再次执行我的脚本时,我仍然遇到与以前一样的错误。

我也(根据这个答案的build议)尝试做

 mywriter = animation.FFMpegWriter() anim.save('mymovie.mp4',writer=mywriter) 

但那也行不通! 它导致了以下错误:

  File "anitest.py", line 22, in <module> im_ani.save('mymovie.mp4',writer=mywriter) File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 712, in save with writer.saving(self._fig, filename, dpi): File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__ return self.gen.next() File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 169, in saving self.setup(*args) File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 159, in setup self._run() File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 186, in _run stdin=subprocess.PIPE) File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 

任何帮助在这里将不胜感激。 我使用Ubuntu 14.04。 谢谢!

我们在上面的评论中得出了一个解决方案。 总结:

  • 这个相当神秘的错误信息的原因是:

     AttributeError: 'str' object has no attribute 'saving' 

    matplotlib中的这个bug是在版本1.4.0( 这里也提到 )中修复的。

  • 但是,将matplotlib更新到1.4.0或更新版本将不会解决问题的根本原因,这就是ffmpeg没有安装( 请参阅此处 )。

  • OP在安装ffmpeg时遇到了困难,因为它是从14.04版本的官方Ubuntu版本库中删除的 (它在Ubuntu 15.04中被恢复)。 对于那些仍然使用旧版本Ubuntu的人来说,一个解决办法就是添加这个非官方的PPA :

     $ sudo add-apt-repository ppa:mc3man/trusty-media $ sudo apt-get update $ sudo apt-get dist-upgrade # recommended on first use $ sudo apt-get install ffmpeg 

1)确保你使用matplotlib V1.4或更高版本

 python -c 'import matplotlib;print matplotlib.__version__' 

2a)试着在14.04安装ffmpeg ,可能会失败。 如果是的话,转到2b)

2b)然后安装libav-tools:

  sudo apt-get install libav-tools 

并使用此子句来保存动画

 anim.save('image.mp4', fps=20, writer="avconv", codec="libx264")