Speichern des Plots in einer Bilddatei anstatt ihn mit Matplotlib darzustellen

Ich schreibe ein quick-and-dirty Skript, um Plots on the fly zu generieren. Ich verwende den folgenden Code (aus der Matplotlib Dokumentation) als Ausgangspunkt:

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

Ich möchte den Plot nicht auf einer grafischen Benutzeroberfläche anzeigen, sondern ihn in einer Datei (z.B. foo.png) speichern, so dass er z.B. in Batch-Skripten verwendet werden kann. Wie kann ich das tun?

Lösung

Obwohl die Frage bereits beantwortet wurde, möchte ich noch einige nützliche Tipps für die Verwendung von matplotlib.pyplot.savefig hinzufügen. Das Dateiformat kann durch die Erweiterung angegeben werden:

from matplotlib import pyplot as plt

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

ergibt eine gerasterte bzw. vektorisierte Ausgabe, die beide nützlich sein können. Außerdem werden Sie feststellen, dass pylab einen großzügigen, oft unerwünschten, Leerraum um das Bild herum lässt. Entfernen Sie ihn mit:

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

Die Lösung ist:

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

Wenn Ihnen das Konzept der "aktuellen" Zahl nicht gefällt, tun Sie es:

import matplotlib.image as mpimg

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