Guardar el gráfico en un archivo de imagen en lugar de mostrarlo con Matplotlib

Estoy escribiendo un script rápido y sucio para generar gráficos sobre la marcha. Estoy usando el código siguiente (de la documentación de Matplotlib) como punto de partida:

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

No quiero mostrar el gráfico en una GUI, en su lugar, quiero guardar el gráfico en un archivo (digamos foo.png), para que, por ejemplo, pueda ser utilizado en scripts por lotes. ¿Cómo puedo hacerlo?

Solución

Aunque la pregunta ha sido respondida, me gustaría añadir algunos consejos útiles cuando se utiliza matplotlib.pyplot.savefig. El formato del archivo puede ser especificado por la extensión:

from matplotlib import pyplot as plt

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

Dará una salida rasterizada o vectorizada, respectivamente, que pueden ser útiles. Además, encontrará que pylab deja un generoso, a menudo indeseable, espacio en blanco alrededor de la imagen. Elimínelo con:

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

La solución es:

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

Si no te gusta el concepto de "corriente", hazlo:

import matplotlib.image as mpimg

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