oro*_*ome 5 python format rendering matplotlib
我对matplotlib在确定可以呈现的格式时使用的后端所扮演的角色感到困惑.
例如,文档说 'agg'后端生成PNG,"光栅图形"但是如果我
import matplotlib
matplotlib.use(‘agg’)
import matplotlib.pyplot
fig, ax = matplotlib.pyplot.subplots()
#...
Run Code Online (Sandbox Code Playgroud)
我可以用
fig.savefig(“thefig.pdf”)
Run Code Online (Sandbox Code Playgroud)
生成PDF,或
fig.savefig(“thefig.svg”)
Run Code Online (Sandbox Code Playgroud)
制作矢量图形.
后端在限制matplotlib可以生成的格式和渲染类型(矢量与栅格)方面起什么作用?
好问题!后端Agg本身仅生成光栅图形。
fig.savefig('name.pdf')当您调用(或)时发生的情况.svg是后端暂时更改为生成向量输出。
每个后端都可以选择如何处理这个问题,但是对于Agg,当您保存矢量输出时,它基本上会执行以下操作:
pdf = self.switch_backends(FigureCanvasPdf)
return pdf.print_pdf(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
同样,对于 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
Run Code Online (Sandbox Code Playgroud)
该print_figure方法总体上控制保存。保存为特定格式是通过查找适当的print_<formatname>方法来处理的(请参阅FigureCanvasBase._get_print_method获取确切的详细信息)。
每个后端通过重写这些方法来指定它可以保存为哪些格式。每个的默认设置是暂时切换回相关的“基本”后端(例如,用于光栅格式的 Agg、用于 pdf 的 PDF、用于 svg 的 SVG 等)。即使您使用的后端仅支持单一格式,这也允许将数字轻松保存为所有格式。
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |