Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib后端对渲染格式有什么限制?_Python_Matplotlib_Format_Rendering - Fatal编程技术网

Python matplotlib后端对渲染格式有什么限制?

Python matplotlib后端对渲染格式有什么限制?,python,matplotlib,format,rendering,Python,Matplotlib,Format,Rendering,我对matplotlib使用的后端在确定可以呈现何种格式时所起的作用感到困惑 例如,“agg”后端会生成PNG,“光栅图形”,但如果 import matplotlib matplotlib.use(‘agg’) import matplotlib.pyplot fig, ax = matplotlib.pyplot.subplots() #... 我可以用 fig.savefig(“thefig.pdf”) 生成PDF,或 fig.savefig(“thefig.svg”) 生成矢量图

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

例如,“agg”后端会生成PNG,“光栅图形”,但如果

import matplotlib
matplotlib.use(‘agg’)

import matplotlib.pyplot
fig, ax = matplotlib.pyplot.subplots()
#...
我可以用

fig.savefig(“thefig.pdf”)
生成PDF,或

fig.savefig(“thefig.svg”)
生成矢量图形


后端在限制matplotlib可以生成何种格式和类型的渲染(矢量与光栅)方面扮演什么角色?

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

当您调用
fig.savefig('name.pdf')
(或
.svg
)时,后端会临时更改以生成向量输出

每个后端都可以选择如何处理此问题,但对于
Agg
,当您保存向量输出时,它基本上会:

pdf = self.switch_backends(FigureCanvasPdf)
return pdf.print_pdf(*args, **kwargs)
同样,对于PDF后端,如果要求保存光栅图像,它会临时切换到Agg

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


更详细一点,以防编写matplotlib后端:任何matplotlib画布实例都有几个
print\uz
方法:

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 
[24]中的
:backend_base.figureCanvabase.print_
后端\u base.figureCanvabase.print\u bmp
后端\u base.figureCanvabase.print\u eps
后端\u base.figure canvasbase.print\u图
后端\u base.figureCanvabase.print\u jpeg
后端\u base.figureCanvabase.print\u jpg
backend_base.figureCanvabase.print_pdf
后端\u base.figureCanvabase.print\u pgf
backend_base.figureCanvabase.print_png
后端\u base.figureCanvabase.print\u ps
后端_base.figureCanvabase.print_raw
后端_base.figureCanvabase.print_rgba
后端_base.figureCanvabase.print_svg
后端_base.figureCanvabase.print_svgz
后端\u base.figureCanvabase.print\u tif
后端\u base.figureCanvabase.print\u tiff
print\u figure
方法通常控制保存。通过查找适当的
print\u
方法(请参见
FigureCanvabase.\u get\u print\u方法
了解确切的详细信息)来处理保存到特定格式的操作


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

谢谢!这正是我要找的信息。