Matplotlib Figur Gesichtsfarbe (Hintergrundfarbe)

91

Kann jemand bitte erklären, warum der folgende Code beim Einstellen der Gesichtsfarbe der Figur nicht funktioniert?

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.

Wenn ich die Höhe und Breite der Figur benutze, werden fig1.set_figheight(11) fig1.set_figwidth(8.5)diese vom Befehl erfasst plt.savefig("trial_fig.png"). Die Gesichtsfarbeneinstellung wird jedoch nicht übernommen. Warum?

Danke für Ihre Hilfe.

Curious2learn
quelle

Antworten:

130

savefigDies liegt daran, dass die Gesichtsfarbe für den Hintergrund der Figur überschrieben wird.

(Dies ist eigentlich absichtlich ... Die Annahme ist, dass Sie wahrscheinlich die Hintergrundfarbe der gespeicherten Figur mit dem facecolorWarwar steuern möchten. Dies ist jedoch savefigeine verwirrende und inkonsistente Standardeinstellung!)

Die einfachste Problemumgehung ist nur zu tun fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(ich gebe hier die Kantenfarbe an, da die Standardkantenfarbe für die tatsächliche Figur Weiß ist, wodurch Sie einen weißen Rand um die gespeicherte Figur erhalten).

Hoffentlich hilft das!

Joe Kington
quelle
30

Ich musste das transparente Schlüsselwort verwenden, um die Farbe zu erhalten, die ich mit meiner Initiale gewählt hatte

fig=figure(facecolor='black')

so was:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)
Labibah
quelle
4
Warum verwenden Sie, transparent=Truewenn Sie eine bereitstellen facecolor?
Alexis.Rolland
27

savefighat einen eigenen Parameter für facecolor. Ich denke, ein noch einfacherer Weg als die akzeptierte Antwort besteht darin, sie nur einmal global festzulegen , anstatt sie facecolor=fig.get_facecolor()jedes Mal zu formulieren :

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'
tozCSS
quelle
0

Wenn Sie die Hintergrundfarbe ändern möchten, versuchen Sie Folgendes:

plt.rcParams['figure.facecolor'] = 'white'
song.xiao
quelle