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.

Curious2learn
źródło

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!

Joe Kington
źródło
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)
Labibah
źródło
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'
tozCSS
źródło
0

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

plt.rcParams['figure.facecolor'] = 'white'
song.xiao
źródło