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?
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')
La solución es:
pylab.savefig('foo.png')
Si no te gusta el concepto de "corriente", hazlo:
import matplotlib.image as mpimg
img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)