Salva la trama in un file immagine invece di visualizzarla usando Matplotlib

Sto scrivendo uno script veloce e sporco per generare trame al volo. Sto usando il codice qui sotto (dalla documentazione di Matplotlib) come punto di partenza:

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

Non voglio visualizzare la trama su una GUI, invece, voglio salvare la trama in un file (diciamo pippo.png), in modo che, per esempio, possa essere utilizzato in script batch. Come posso farlo?

Soluzione

Mentre la domanda ha ricevuto una risposta, vorrei aggiungere alcuni suggerimenti utili quando si usa matplotlib.pyplot.savefig. Il formato del file può essere specificato dall'estensione:

from matplotlib import pyplot as plt

plt.savefig('foo.png')
plt.savefig('foo.pdf')

Darà rispettivamente un output rasterizzato o vettorializzato, entrambi i quali potrebbero essere utili. Inoltre, troverete che pylab lascia un generoso, spesso indesiderabile, spazio bianco intorno all'immagine. Rimuovilo con:

savefig('foo.png', bbox_inches='tight')
Commentari (8)

La soluzione è:

pylab.savefig('foo.png')
Commentari (0)

Se non vi piace il concetto di "corrente" figura, fate:

import matplotlib.image as mpimg

img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)
Commentari (5)