Zapisz wykres do pliku obrazu zamiast wyświetlać go za pomocą Matplotlib

Piszę szybki i brudny skrypt do generowania działek w locie. Używam poniższego kodu (z dokumentacji Matplotlib) jako punktu wyjścia:

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

Nie chcę wyświetlać wykresu na GUI, zamiast tego chcę zapisać wykres do pliku (powiedzmy foo.png), aby można go było użyć w skryptach wsadowych. Jak to zrobić?

Rozwiązanie

Chociaż na pytanie została udzielona odpowiedź, chciałbym dodać kilka przydatnych wskazówek podczas korzystania z matplotlib.pyplot.savefig. Format pliku może być określony przez rozszerzenie:

from matplotlib import pyplot as plt

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

Da odpowiednio rasteryzowane lub wektorowe wyjście, oba, które mogą być użyteczne. Dodatkowo, przekonasz się, że pylab pozostawia wokół obrazu obfite, często niepożądane, białe przestrzenie. Usuń ją za pomocą:

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

Rozwiązaniem jest:

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

Jeśli nie podoba Ci się koncepcja "aktualnej" figury, zrób to:

import matplotlib.image as mpimg

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