Ik ben een quick-and-dirty script aan het schrijven om plots on the fly te genereren. Ik gebruik de onderstaande code (uit de Matplotlib documentatie) als een startpunt:
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
Ik wil de plot niet op een GUI weergeven, in plaats daarvan wil ik de plot opslaan in een bestand (zeg foo.png), zodat het bijvoorbeeld kan worden gebruikt in batch scripts. Hoe doe ik dat?
Hoewel de vraag is beantwoord, wil ik'graag nog wat nuttige tips toevoegen bij het gebruik van matplotlib.pyplot.savefig. Het bestandsformaat kan worden gespecificeerd door de extensie:
from matplotlib import pyplot as plt
plt.savefig('foo.png')
plt.savefig('foo.pdf')
Zal respectievelijk een gerasterde of gevectoriseerde uitvoer geven, die beide nuttig kunnen zijn. Bovendien zul je merken dat pylab
een royale, vaak ongewenste, witruimte rond het beeld laat. Verwijder deze met:
savefig('foo.png', bbox_inches='tight')
De oplossing is:
pylab.savefig('foo.png')
Als je niet van het concept van de "huidige" figuur houdt, doe dat dan:
import matplotlib.image as mpimg
img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)