Matplotlib figure facecolor (สีพื้นหลัง)


95

ใครช่วยอธิบายได้ไหมว่าทำไมโค้ดด้านล่างถึงใช้ไม่ได้เมื่อตั้งค่าสีของรูป

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.

เมื่อฉันระบุความสูงและความกว้างของรูปโดยใช้เหล่านี้จะถูกหยิบขึ้นมาโดยคำสั่งfig1.set_figheight(11) fig1.set_figwidth(8.5) plt.savefig("trial_fig.png")อย่างไรก็ตามไม่มีการเลือกการตั้งค่าสีของใบหน้า ทำไม?

ขอบคุณสำหรับความช่วยเหลือของคุณ.

คำตอบ:


134

เป็นเพราะsavefigแทนที่สีของใบหน้าสำหรับพื้นหลังของรูป

(นี่เป็นความตั้งใจจริง ... สมมติฐานคือคุณอาจต้องการควบคุมสีพื้นหลังของรูปที่บันทึกด้วยfacecolorkwarg savefigเป็นค่าเริ่มต้นที่สับสนและไม่สอดคล้องกัน!)

วิธีแก้ปัญหาที่ง่ายที่สุดคือทำfig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(ฉันกำลังระบุ edgecolor ที่นี่เนื่องจาก edgecolor เริ่มต้นสำหรับรูปจริงคือสีขาวซึ่งจะทำให้คุณมีขอบสีขาวรอบ ๆ รูปที่บันทึกไว้)

หวังว่าจะช่วยได้!


30

ฉันต้องใช้คีย์เวิร์ดโปร่งใสเพื่อให้ได้สีที่ฉันเลือกด้วยการเริ่มต้น

fig=figure(facecolor='black')

แบบนี้:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

4
ทำไมคุณถึงใช้transparent=Trueถ้าคุณให้facecolor?
Alexis. Rolland

27

savefigมีพารามิเตอร์ของตัวเองสำหรับfacecolor. ฉันคิดว่าวิธีที่ง่ายกว่าคำตอบที่ยอมรับคือตั้งค่าทั่วโลกเพียงครั้งเดียวแทนที่จะใส่facecolor=fig.get_facecolor()ทุกครั้ง:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'

0

หากคุณต้องการเปลี่ยนสีพื้นหลังให้ลองทำดังนี้

plt.rcParams['figure.facecolor'] = 'white'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.