好問題! 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等)。即使您使用的後端只支持單一格式,也可以輕鬆地將數字保存爲所有格式。
謝謝!這正是我正在尋找的信息。 – orome 2014-11-01 19:58:09