2013-04-24 15 views
54

Come posso salvare i grafici Python con una qualità molto alta?salvataggio di immagini in Python ad altissima qualità

Cioè, quando continuo a zoomare sull'oggetto salvato in un file pdf, non c'è sfocatura?

Inoltre, quale sarebbe la migliore modalità per salvarlo?

png, eps? O qualche altro? Non riesco a fare pdf perché c'è un numero nascosto che capita che pasticcio con la compilazione Latexmk.

risposta

77

Se si utilizza matplotlib e si tenta di ottenere buone cifre in un documento in lattice, salvare come eps. In particolare, provare qualcosa di simile dopo aver eseguito i comandi per tracciare l'immagine:

plt.savefig('destination_path.eps', format='eps', dpi=1000) 

Ho scoperto che i file EPS funzionano meglio e il parametro dpi è ciò che rende veramente li guardare bene in un documento.

UPDATE:

per specificare l'orientamento della figura prima di salvare semplicemente chiamare il seguente prima della chiamata plt.savefig, ma dopo aver creato la trama (supponendo che avete tracciato utilizzando un asse con il nome ax):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle) 

Dove elevation_angle è un numero (in gradi) che specifica l'angolo polare (in basso rispetto all'asse verticale z) e lo azimuthal_angle specifica l'angolo azimutale (attorno all'asse z).

Trovo che sia più semplice determinare questi valori prima di tracciare l'immagine e quindi ruotarla e osservare i valori correnti degli angoli visualizzati verso la parte inferiore della finestra appena sotto la trama effettiva. Tieni presente che le posizioni x, y, z appaiono per impostazione predefinita, ma vengono sostituite con i due angoli quando inizi a fare clic + trascina + ruota l'immagine.

+0

@ spencerlon2 cosa se voglio cambia l'orientamento della figura prima di salvare? – dustin

+0

Vedere la risposta aggiornata. – spencerlyon2

31

Solo per aggiungere i miei risultati, usando anche matplotlib.

.eps ha reso tutto il mio testo in grassetto e rimosso la trasparenza. .svg mi ha dato immagini ad alta risoluzione che in realtà sembravano il mio grafico.

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
# Do the plot code 
fig.savefig('myimage.svg', format='svg', dpi=1200) 

ho usato 1200 dpi, perché un sacco di riviste scientifiche richiedono immagini in 1200/600/300 dpi a seconda di ciò che l'immagine è di. Converti in dpi desiderati e formatta in GiMP o Inkscape.

MODIFICA: Ovviamente il dpi non ha importanza dato che .svg sono grafica vettoriale e hanno "risoluzione infinita".

+0

Il DPI è molto importante quando usiamo 'imshow (..)' da qualche parte sulla figura. Queste bitmap vengono rasterizzate quando vengono incorporate nell'SVG. Con il DPI predefinito, i risultati sono anche peggiori di quelli che vediamo sullo schermo, decisamente inadatti alle pubblicazioni. –

0

Va bene, ho trovato la risposta di lavoro di spencerlyon2, tuttavia nel caso in cui qualcuno si troverebbe senza sapere cosa fare con quella linea, ho dovuto fare in questo modo:

beingsaved = plt.figure() 

# some scatters 
plt.scatter(X_1_x, X_1_y) 
plt.scatter(X_2_x, X_2_y) 

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000) 
Problemi correlati