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.

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!


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)

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'

0

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

plt.rcParams['figure.facecolor'] = 'white'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.