Salvar gráfico em arquivo de imagem em vez de exibi-lo usando Matplotlib

Estou a escrever um guião rápido e sujo para gerar enredos na mosca. Estou usando o código abaixo (da documentação Matplotlib) como um ponto 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

Eu não'não quero exibir o gráfico em uma GUI, em vez disso, quero salvar o gráfico em um arquivo (digamos foo.png), para que, por exemplo, ele possa ser usado em scripts em lote. Como eu faço isso?

Solução

Enquanto a pergunta foi respondida, I'gostaria de adicionar algumas dicas úteis ao usar matplotlib.pyplot.savefig. O formato do arquivo pode ser especificado pela extensão:

from matplotlib import pyplot as plt

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

Vai dar uma saída rasterizada ou vetorizada respectivamente, ambas as quais podem ser úteis. Além disso, você'vai descobrir que o pylab deixa um espaço generoso, muitas vezes indesejável, em branco ao redor da imagem. Remova-a com:

savefig('foo.png', bbox_inches='tight')
Comentários (8)

A solução é:

pylab.savefig('foo.png')
Comentários (0)

Se você não'não gosta do conceito do "atual" figura, faça:

import matplotlib.image as mpimg

img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)
Comentários (5)