2010-06-28 12 views
25

Il seguente codice di esempio produrrà una trama linea di base, senza assi e salvarlo come un file SVG:Matplotlib savefig assetto

import matplotlib.pyplot as plt 
plt.axis('off') 
plt.plot([1,3,1,2,3]) 
plt.plot([3,1,1,2,1]) 
plt.savefig("out.svg", transparent = True) 

Come faccio a impostare la risoluzione/dimensioni dell'immagine? C'è una spaziatura su tutti i lati dell'immagine oltre il grafico a linee. Come rimuovo il padding in modo che le linee appaiano sul bordo dell'immagine?

risposta

45

Sono continuamente stupito di quanti modi ci sono per fare la stessa cosa in matplotlib.
Come tale, sono sicuro che qualcuno può rendere questo codice molto più conciso.
In ogni caso, questo dovrebbe dimostrare chiaramente come risolvere il problema.

>>> import pylab 
>>> fig = pylab.figure() 

>>> pylab.axis('off') 
(0.0, 1.0, 0.0, 1.0) 
>>> pylab.plot([1,3,1,2,3]) 
[<matplotlib.lines.Line2D object at 0x37d8cd0>] 
>>> pylab.plot([3,1,1,2,1]) 
[<matplotlib.lines.Line2D object at 0x37d8d10>] 

>>> fig.get_size_inches() # check default size (width, height) 
array([ 8., 6.]) 
>>> fig.set_size_inches(4,3) 
>>> fig.get_dpi()   # check default dpi (in inches) 
80 
>>> fig.set_dpi(40) 

# using bbox_inches='tight' and pad_inches=0 
# I managed to remove most of the padding; 
# but a small amount still persists 
>>> fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0) 

Documentation per savefig().

+4

c'è un modo per metterli in matplotlibrc? 'Bad key" savefig.bbox_inches "' – endolith

+0

Sei il benvenuto. Non so se è possibile fornire tali specifiche di configurazione usando un file matplotlibrc. – bernie

+0

Un altro comando che mi piace usare (insieme a quelli elencati sopra) da pyplot è plt.tight_layout(), che rimuove lo spazio bianco in eccesso attorno alla figura. – Blink

2

L'oggetto asse predefinito lascia spazio per i titoli, le etichette di graduazione e simili. Rendere il proprio oggetto asse che riempie l'intera area:

fig=figure() 
ax=fig.add_axes((0,0,1,1)) 
ax.set_axis_off() 
ax.plot([3,1,1,2,1]) 
ax.plot([1,3,1,2,3]) 
fig.savefig('out.svg') 

nel formato SVG non riesco a vedere la linea che è di destra in basso, ma in formato png posso, quindi è probabilmente una caratteristica del svg renderer . Potresti voler aggiungere solo un piccolo padding per mantenere tutto visibile.

+0

corretto. È possibile regolare la posizione degli assi nella figura rendendo manualmente gli assi. Il comando pyplot (o pylab) per la creazione di un asse include questo nella sua docstring: assi (rect, axisbg = 'w') dove rect = [sinistra, fondo, larghezza, altezza] in unità normalizzate (0,1). axisbg è il colore di sfondo per l'asse, di default bianco – timbo

Problemi correlati