2014-10-31 8 views
5

Sono confuso riguardo al ruolo svolto dal back-end utilizzato da matplotlib nel determinare quali formati possono essere visualizzati.Quali limiti ha il back-end matplotlib nei formati di rendering?

Ad esempio, il documentation says che il back-end 'agg' genera PNG, "grafica raster", ma se io

import matplotlib 
matplotlib.use(‘agg’) 

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

posso usare

fig.savefig(“thefig.pdf”) 

per generare un PDF, o

fig.savefig(“thefig.svg”) 

per produrre grafica vettoriale.

Che ruolo gioca il backend nel limitare i formati e i tipi di rendering (vettoriale vs raster) che può produrre matplotlib?

risposta

2

Buona domanda! Il backend Agg produce solo grafica raster.

Che cosa succede quando si chiama fig.savefig('name.pdf') (o .svg) è che il backend viene temporaneamente modificato per generare output vettoriale.

Ogni backend può scegliere come gestisce questo, ma per Agg, quando si salva in uscita vettore, lo fa essenzialmente:

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

Allo stesso modo, per il backend PDF, si passa temporaneamente al Agg se richiesto per salvare un'immagine raster.

La commutazione dei backend può essere eseguita al volo per i backend non interattivi, quindi questa tecnica è ampiamente utilizzata "dietro le quinte" per consentire il salvataggio di figure in più formati.


Un po 'più in dettaglio, nel caso in cui si sta mai scrivere un backend matplotlib: Qualsiasi matplotlib Tela esempio ha diversi metodi 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 

I controlli print_figure metodo di risparmio in generale. Il salvataggio in un formato specifico viene gestito consultando il metodo appropriato print_<formatname> (vedere FigureCanvasBase._get_print_method per i dettagli esatti).

Ogni backend specifica quali formati è possibile salvare sovrascrivendo tali metodi. L'impostazione predefinita per ciascuna è di tornare temporaneamente al back-end "base" pertinente (ad esempio Agg per i formati raster, PDF per PDF, SVG per svg, ecc.). Ciò consente di salvare facilmente le figure in tutti i formati anche se il back-end utilizzato supporta solo un singolo formato.

+0

Grazie! Questa è esattamente l'informazione che stavo cercando. – orome

Problemi correlati