【问题标题】:What limits does the matplotlib backend place on rendering formats?matplotlib 后端对渲染格式有什么限制?
【发布时间】:2014-12-28 01:58:23
【问题描述】:

我对 matplotlib 使用的后端在确定可以呈现哪些格式时所起的作用感到困惑。

例如,'agg'后端生成PNG的documentation says,“光栅图形”,但如果我

import matplotlib
matplotlib.use(‘agg’)

import matplotlib.pyplot
fig, ax = matplotlib.pyplot.subplots()
#...

我可以使用

fig.savefig(“thefig.pdf”)

生成 PDF,或

fig.savefig(“thefig.svg”)

生成矢量图形。

后端在限制 matplotlib 可以生成哪些格式和类型的渲染(矢量与光栅)方面发挥什么作用?

【问题讨论】:

    标签: python matplotlib format rendering


    【解决方案1】:

    好问题! Agg 后端本身只生成光栅图形。

    当您调用fig.savefig('name.pdf')(或.svg)时发生的情况是后端临时更改为生成向量输出。

    每个后端可以选择它如何处理这个,但是对于Agg,当你保存向量输出时,它基本上是这样做的:

    pdf = self.switch_backends(FigureCanvasPdf)
    return pdf.print_pdf(*args, **kwargs)
    

    同样,对于 PDF 后端,如果要求保存光栅图像,它会暂时切换到 Agg。

    可以为非交互式后端动态切换后端,因此这种技术被广泛用于“幕后”,以允许以多种格式保存图形。


    更详细一点,以防您曾经编写过 matplotlib 后端:任何 matplotlib Canvas 实例都有几个 print_<format> 方法:

    In [24]: backend_bases.FigureCanvasBase.print_<tab>
    backend_bases.FigureCanvasBase.print_bmp           
    backend_bases.FigureCanvasBase.print_eps           
    backend_bases.FigureCanvasBase.print_figure        
    backend_bases.FigureCanvasBase.print_jpeg          
    backend_bases.FigureCanvasBase.print_jpg           
    backend_bases.FigureCanvasBase.print_pdf           
    backend_bases.FigureCanvasBase.print_pgf           
    backend_bases.FigureCanvasBase.print_png           
    backend_bases.FigureCanvasBase.print_ps            
    backend_bases.FigureCanvasBase.print_raw           
    backend_bases.FigureCanvasBase.print_rgba          
    backend_bases.FigureCanvasBase.print_svg           
    backend_bases.FigureCanvasBase.print_svgz          
    backend_bases.FigureCanvasBase.print_tif           
    backend_bases.FigureCanvasBase.print_tiff 
    

    print_figure 方法通常控制保存。通过查找适当的print_&lt;formatname&gt; 方法来处理保存为特定格式(有关详细信息,请参阅FigureCanvasBase._get_print_method)。

    每个后端通过覆盖这些方法来指定它可以保存到哪些格式。每个的默认设置是暂时切换回相关的“基本”后端(例如光栅格式的 Agg、pdf 的 PDF、svg 的 SVG 等)。即使您使用的后端仅支持一种格式,也可以轻松地将数字保存为所有格式。

    【讨论】:

    • 谢谢!这正是我正在寻找的信息。
    猜你喜欢
    • 2016-09-15
    • 2010-12-12
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多