【问题标题】:animation with matplotlib 'format "rgba" is not supported'matplotlib '不支持格式“rgba”的动画'
【发布时间】:2013-02-01 18:55:37
【问题描述】:

我正在尝试使用 matplotlib 制作动画,使用示例 from here。起初的问题是 ffmpeg 没有安装,所以我从 macports 安装了它——但并不是说不支持“rgba”。错误信息:

File "Plot_shocktube1D.py", line 85, in <module>
    animDensity.save(densityAnimationName, extra_args=['-vcodec', 'libx264']) #, writer=movWriter)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/animation.py", line 615, in save
    writer.grab_frame()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/animation.py", line 199, in grab_frame
    dpi=self.dpi)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 1363, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 2012, in print_figure
    print_method = self._get_print_method(format)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 1953, in _get_print_method
    '%s.' % (format, ', '.join(formats)))
ValueError: Format "rgba" is not supported.
Supported formats: bmp, emf, eps, gif, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff.

现在,经过一番挣扎后,我使用png 而不是rgba 设置了FFMpegWriter,但现在我遇到了新错误...

movWriter = anim.FFMpegWriter(fps=5, codec=None, bitrate=None, extra_args=None, metadata=None)
movWriter.frame_format = 'jpg'
animDensity = anim.FuncAnimation(fig, animateDensity, frames=10, interval=100, blit=True)
animDensity.save(densityAnimationName, extra_args=['-vcodec', 'libx264'], writer=movWriter)

有错误:

File "Plot_shocktube1D.py", line 85, in <module>
    animDensity.save(densityAnimationName, extra_args=['-vcodec', 'libx264'], writer=movWriter)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/animation.py", line 615, in save
    writer.grab_frame()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/animation.py", line 199, in grab_frame
    dpi=self.dpi)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 1363, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 2093, in print_figure
    **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 326, in print_jpg
    self._print_bitmap(filename, *args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 319, in _print_bitmap
    self.write_bitmap(filename, width, height, dpi)
ValueError: Unknown file type

我的印象是,我只是没有安装我需要的东西...通常 macports 为我设置了所有东西,我不确定该去哪里找。任何帮助将不胜感激。

【问题讨论】:

    标签: python macos animation matplotlib macports


    【解决方案1】:

    该 use() 语句对我没有帮助,但我遇到了与您试图让 basic matplotlib animation example 的第二部分在 IPython 中工作时相同的错误。我使用 macports 安装 ffmpeg,然后得到相同的 rgba not supported 警告(尽管 rgba 出现在支持的格式列表中!)。

    无论如何,我发现如果我使用显式 FFMpegFileWriter(不仅仅是 FFMpegWriter),一切正常,并且 rgba 问题消失了,我得到了一个可用的 m4v 文件:

    import matplotlib.animation as animation
    fig2 = plt.figure()
    
    x = np.arange(-9, 10)
    y = np.arange(-9, 10).reshape(-1, 1)
    base = np.hypot(x, y)
    ims = []
    for add in np.arange(15):
        ims.append((plt.pcolor(x, y, base + add, norm=plt.Normalize(0, 30)),))
    
    im_ani = animation.ArtistAnimation(fig2, ims, interval=50, repeat_delay=3000, blit=True)
    im_ani.save('im.m4v', writer=animation.FFMpegFileWriter(), metadata={'artist':'Guido'})
    

    【讨论】:

      【解决方案2】:

      解决方案,我不知道为什么,是让 matplotlib 使用名为“Agg”的东西:

      import matplotlib
      matplotlib.use("Agg")
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      相关资源
      最近更新 更多