Matplotlib 그림 facecolor (배경색)


91

누군가 그림의 얼굴 색상을 설정할 때 아래 코드가 작동하지 않는 이유를 설명해 주시겠습니까?

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"). 그러나 facecolor 설정은 선택되지 않습니다. 왜?

당신의 도움을 주셔서 감사합니다.

답변:


130

그 이유 savefig는 그림의 배경에 대한 얼굴색을 재정의 하기 때문 입니다.

(실제로 이것은 의도적 인 것입니다 ... facecolorkwarg를 사용하여 저장된 그림의 배경색을으로 제어하고 싶을 것이라고 가정 합니다 savefig.하지만 이는 혼란스럽고 일관성이없는 기본값입니다!)

가장 쉬운 해결 방법은 바로 수행하는 것입니다 fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(실제 그림의 기본 가장자리 색상이 흰색이므로 저장된 그림 주위에 흰색 테두리가 표시되기 때문에 여기서 가장자리 색상을 지정합니다).

도움이 되었기를 바랍니다.


30

이니셜로 선택한 색상을 얻으려면 transparent 키워드를 사용해야했습니다.

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.