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?
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')
Die Lösung ist:
pylab.savefig('foo.png')
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)