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.

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!


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)

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'

0

Jika Anda ingin mengubah warna latar belakang, coba ini:

plt.rcParams['figure.facecolor'] = 'white'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.