2012-02-13 19 views
8

Quiero generar un gráfico vectorial con matplotlib. Intenté mucho, pero el resultado es una imagen ráster. Esto es lo que yo uso:matplotlib: diagrama de generación de vectores

import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

y finalmente:

myfig.savefig('myfig.eps', format='eps') 

he encontrado que la exportación a ps da una imagen vectorial, pero el problema con eps restos.

+4

¿Puedes dar un ejemplo (inventar algunos datos si es necesario) de las llamadas reales a 'plt'? Esto ayudará a otros a contribuir. – Yann

+1

Estoy seguro de que el problema que está describiendo no es el que usted sugiere y que la salida de los eps realmente es una reproducción vectorial completamente desarrollada. Puede ser que estés mirando los eps a través de un visor deficiente, ¿qué aplicación estás usando para ver los eps? – pelson

+0

'plt.savefig ('some_name.eps', bbox_inches = 'tight')' produce un gráfico vectorizado en mi sistema. – mab

Respuesta

5

uso el siguiente código:

from matplotlib import pyplot as plt 

fig, ax = plt.subplots() # or 
fig.savefig('filename.eps', format='eps') 
3

Si necesita archivos EMF como formato de salida, por ejemplo, para insertar parcelas de alta calidad en formato MS Word/PowerPoint y que están dispuestos a utilizar Inkscape como convertidor se puede aplicar esta solución:

from matplotlib import pyplot as plt 
import subprocess, os 

def plot_as_emf(figure, **kwargs): 
    inkscape_path = kwargs.get('inkscape', "C://Program Files//Inkscape//inkscape.exe") 
    filepath = kwargs.get('filename', None) 

    if filepath is not None: 
     path, filename = os.path.split(filepath) 
     filename, extension = os.path.splitext(filename) 

     svg_filepath = os.path.join(path, filename+'.svg') 
     emf_filepath = os.path.join(path, filename+'.emf') 

     figure.savefig(svg_filepath, format='svg') 

     subprocess.call([inkscape_path, svg_filepath, '--export-emf', emf_filepath]) 
     os.remove(svg_filepath) 

Para probar esta función se puede ejecutar un ejemplo sencillo:

plt.plot([1,2], [4,5]) 
fig = plt.gcf() 
plot_as_emf(fig, filename="C:/test.emf") 
Cuestiones relacionadas