2014-10-31 20 views
5

我對matplotlib在確定可以呈現哪些格式時使用的後端扮演的角色感到困惑。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可以生成什麼樣的格式和種類的渲染(矢量vs.柵格)方面發揮了什麼作用?

回答

2

好問題! Agg後端本身只產生光柵圖形。

當您撥打fig.savefig('name.pdf')(或.svg)時,發生了什麼情況是後端暫時更改爲生成向量輸出。

每個後端可以選擇如何處理這一點,但對於Agg,當您保存矢量輸出,它基本上:

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

同樣,對於PDF後端,它暫時切換到AGG的,如果要求保存一個光柵圖像。

切換後端可以爲非交互式後端動態完成,因此該技術被廣泛用於「幕後」,以允許數字以多種格式保存。更


詳細一點,如果你曾經寫matplotlib後端:任何matplotlib帆布實例有幾種方法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_<formatname>方法(參見FigureCanvasBase._get_print_method瞭解確切的詳細信息)來保存到特定格式。

每個後端通過覆蓋這些方法來指定可以保存的格式。每種方法的默認設置是暫時切換回相關的「基本」後端(例如,光柵格式爲Agg,PDF爲pdf,SVG爲svg等)。即使您使用的後端只支持單一格式,也可以輕鬆地將數字保存爲所有格式。

+0

謝謝!這正是我正在尋找的信息。 – orome 2014-11-01 19:58:09