2012-02-13 13 views
8

Voglio generare un grafico vettoriale con matplotlib. Ho provato molto, ma l'output è un'immagine raster. Ecco quello che io uso:matplotlib: generazione del grafico vettoriale

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

e infine:

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

ho trovato che l'esportazione verso ps dà un'immagine vettoriale, ma il problema con eps rimane.

+4

Puoi fare un esempio (componi alcuni dati se necessario) delle chiamate effettive a 'plt'? Ciò aiuterà gli altri a contribuire. – Yann

+1

Sono fiducioso che il problema che stai descrivendo non è come suggerisci e che l'output eps è davvero una versione vettoriale a pieno titolo. Potrebbe essere che stai guardando l'eps attraverso un povero spettatore - quale applicazione stai usando per visualizzare l'eps? – pelson

+0

'plt.savefig ('some_name.eps', bbox_inches = 'tight')' produce un grafico vettoriale sul mio sistema. – mab

risposta

5

Io uso il seguente codice:

from matplotlib import pyplot as plt 

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

Se avete bisogno di file EMF come formato di output, ad esempio, di inserire trame di alta qualità in MS Word/PowerPoint e si è disposti a utilizzare Inkscape come convertitore è possibile applicare questa soluzione:

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) 

Per provare questa funzione è possibile eseguire un semplice esempio:

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