2011-09-30 10 views
25

De acuerdo con la documentación de Matplotlib, matplotlib.figure.save_fig toma un argumento opcional format (vea matplotlib.figure documentation).En Matplotlib, ¿hay alguna manera de conocer la lista de formato de salida disponible?

Estos parámetros toman 'una de las extensiones de archivo admitidas por el back-end activo' (como lo dice la documentación oficial).

Mi punto es: ¿cómo saber, para un backend específico, la lista de extensiones compatibles?

La lista de backends disponibles es accesible a través de matplotlib.rcsetup.all_backends. Estos backends están disponibles en matplotlib.backends pero no encuentro una forma de recuperar las extensiones compatibles.

Respuesta

33

Si crea una figura, puede obtener el formato de archivo compatible disponible con el objeto de lona:

import matplotlib.pyplot as plt 
fig = plt.figure() 

print fig.canvas.get_supported_filetypes() 

>>> { 
    'svgz': 'Scalable Vector Graphics', 
    'ps': 'Postscript', 
    'emf': 'Enhanced Metafile', 
    'rgba': 'Raw RGBA bitmap', 
    'raw': 'Raw RGBA bitmap', 
    'pdf': 'Portable Document Format', 
    'svg': 'Scalable Vector Graphics', 
    'eps': 'Encapsulated Postscript', 
    'png': 'Portable Network Graphics' 
} 

y aparecerá una lista de todos los formatos en los que puede dar salida a su objeto actual.

+0

Niza ... no vio esta propiedad de lienzo en el objeto figura. – ohe

+0

La magia inescrutable, arde mientras sana. ¡Gracias por esto! Mi cinturón de herramientas Matplotlib ahora se ha nivelado. –

2

La clase FigureCanvasBase, ubicada en cada backend tiene un método get_supported_filetypes.

Para backend_agg:

figure = matplotlib.figure.Figure() 
fcb = matplotlib.backends.backend_agg.FigureCanvasBase(figure) 
supported_file_types = fcb.get_supported_filetypes() 

supported_file_types contiene:

{'emf': 'Enhanced Metafile', 
'eps': 'Encapsulated Postscript', 
'pdf': 'Portable Document Format', 
'png': 'Portable Network Graphics', 
'ps': 'Postscript', 
'raw': 'Raw RGBA bitmap', 
'rgba': 'Raw RGBA bitmap', 
'svg': 'Scalable Vector Graphics', 
'svgz': 'Scalable Vector Graphics'} 

Una pregunta que queda .... matplotlib.get_backend() vuelve "agg". ¿Hay una manera más fácil de apuntar directamente al módulo de back-end correcto?

+0

'matplotlib.get_backend()' es la forma habitual (¿qué no es fácil con eso?). si quiere cambiar el back-end, puede hacerlo con 'matplotlib.use' o estableciendo en el archivo matplotlibrc,' matplotlib.matplotlib_fname() 'le indicará la ubicación del archivo de configuración. – wim

+0

'matplotlib.get_backend()' devolver un '' str' raw en lugar del módulo de fondo real es funcionalmente inútil para la mayoría de los casos de uso. Sí, obviamente puedes 'getattr (matplotlib.backends, 'backend_' + matplotlib.get_backend(). Lower())' tu camino al pseudo-éxito - ** pero no deberías tener que hacerlo. ** Recurrir a ese tipo de hackeo doloroso solo debería ser el último recurso. –

Cuestiones relacionadas