Warna wajah gambar Matplotlib (warna latar belakang)

91

Adakah yang bisa menjelaskan mengapa kode di bawah ini tidak berfungsi saat menyetel warna wajah gambar?

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.

Ketika saya menentukan tinggi dan lebar gambar menggunakan fig1.set_figheight(11) fig1.set_figwidth(8.5)ini diambil oleh perintah plt.savefig("trial_fig.png"). Namun, pengaturan warna wajah tidak diambil. Mengapa?

Terima kasih atas bantuan Anda.

Curious2learn
sumber

Jawaban:

130

Itu karena savefigmengganti warna wajah untuk latar belakang gambar.

(Ini disengaja, sebenarnya ... Asumsinya adalah Anda mungkin ingin mengontrol warna latar belakang gambar yang disimpan dengan facecolorkwarg to savefig. Ini adalah default yang membingungkan dan tidak konsisten!)

Solusi termudah adalah hanya dengan melakukannya fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(Saya menentukan edgecolor di sini karena edgecolor default untuk gambar sebenarnya adalah putih, yang akan memberi Anda batas putih di sekitar gambar yang disimpan)

Semoga membantu!

Joe Kington
sumber
30

Saya harus menggunakan kata kunci transparan untuk mendapatkan warna yang saya pilih dengan inisial saya

fig=figure(facecolor='black')

seperti ini:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)
Labibah
sumber
4
Mengapa Anda menggunakan transparent=Truejika Anda menyediakan facecolor?
Alexis.Rolland
27

savefigmemiliki parameter sendiri untuk facecolor. Saya pikir cara yang lebih mudah daripada jawaban yang diterima adalah mengaturnya secara global hanya sekali , daripada menempatkan facecolor=fig.get_facecolor()setiap waktu:

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

Jika Anda ingin mengubah warna latar belakang, coba ini:

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