Matplotlib Kolor twarzy rysunku (kolor tła)


91

Czy ktoś może wyjaśnić, dlaczego poniższy kod nie działa podczas ustawiania koloru twarzy na figurze?

import matplotlib.pyplot as plt

# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(11)
fig1.set_figwidth(8.5)

rect = fig1.patch
rect.set_facecolor('red') # works with plt.show().  
                          # Does not work with plt.savefig("trial_fig.png")

ax = fig1.add_subplot(1,1,1)

x = 1, 2, 3
y = 1, 4, 9
ax.plot(x, y)

# plt.show()  # Will show red face color set above using rect.set_facecolor('red')

plt.savefig("trial_fig.png") # The saved trial_fig.png DOES NOT have the red facecolor.

# plt.savefig("trial_fig.png", facecolor='red') # Here the facecolor is red.

Kiedy określam wysokość i szerokość figury za pomocą fig1.set_figheight(11) fig1.set_figwidth(8.5)tych są pobierane przez polecenie plt.savefig("trial_fig.png"). Jednak ustawienie koloru twarzy nie jest wybierane. Czemu?

Dzięki za pomoc.

Odpowiedzi:


130

Dzieje się tak, ponieważ savefigzastępuje kolor twarzy dla tła figury.

(Właściwie jest to celowe ... Założenie jest takie, że prawdopodobnie chciałbyś kontrolować kolor tła zapisanej figury za pomocą facecolorkwarg do savefig. Jest to jednak mylące i niespójne ustawienie domyślne!)

Najłatwiejszym sposobem obejścia tego problemu fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(określam tutaj kolor obramowania, ponieważ domyślny kolor krawędzi rzeczywistej figury jest biały, co da ci białą ramkę wokół zapisanej figury)

Mam nadzieję, że to pomoże!


30

Musiałem użyć przezroczystego słowa kluczowego, aby uzyskać kolor, który wybrałem z moim inicjałem

fig=figure(facecolor='black')

lubię to:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

4
Dlaczego używasz, transparent=Truejeśli podasz facecolor?
Alexis.Rolland

27

savefigma swój własny parametr dla facecolor. Myślę, że jeszcze łatwiejszym sposobem niż akceptowana odpowiedź jest ustawienie ich globalnie tylko raz , zamiast wstawiać za facecolor=fig.get_facecolor()każdym razem:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'

0

Jeśli chcesz zmienić kolor tła, spróbuj tego:

plt.rcParams['figure.facecolor'] = 'white'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.