Matplotlib figure facecolor (màu nền)


91

Ai đó có thể vui lòng giải thích tại sao mã bên dưới không hoạt động khi thiết lập màu mặt của hình không?

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.

Khi tôi chỉ định chiều cao và chiều rộng của hình bằng cách sử dụng fig1.set_figheight(11) fig1.set_figwidth(8.5)chúng sẽ được chọn bởi lệnh plt.savefig("trial_fig.png"). Tuy nhiên, cài đặt màu mặt không được chọn. Tại sao?

Cảm ơn bạn đã giúp đỡ.

Câu trả lời:


130

Đó là vì đã savefigghi đè màu mặt cho nền của hình.

(Thực ra đây là cố ý ... Giả định là bạn có thể muốn kiểm soát màu nền của hình đã lưu bằng facecolorkwarg savefig. Tuy nhiên, đó là một mặc định khó hiểu và không nhất quán!)

Cách giải quyết đơn giản nhất chỉ cần thực hiện fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(tôi đang chỉ định màu sắc ở đây vì màu sắc mặc định cho hình thực tế là màu trắng, điều này sẽ cung cấp cho bạn một đường viền trắng xung quanh hình đã lưu)

Hy vọng rằng sẽ giúp!


30

Tôi phải sử dụng từ khóa trong suốt để lấy màu mà tôi đã chọn với

fig=figure(facecolor='black')

như thế này:

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

4
Tại sao bạn sử dụng transparent=Truenếu bạn cung cấp facecolor?
Alexis.Rolland

27

savefigcó tham số riêng cho facecolor. Tôi nghĩ rằng một cách thậm chí còn dễ dàng hơn câu trả lời được chấp nhận là đặt chúng trên toàn cầu chỉ một lần , thay vì đặt facecolor=fig.get_facecolor()mọi lúc:

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

0

Nếu bạn muốn thay đổi màu nền, hãy thử cách này:

plt.rcParams['figure.facecolor'] = 'white'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.