Матплотліб фігура кольорова (колір тла)


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"). Однак параметр фарби не підбирається. Чому?

Спасибі за вашу допомогу.

Відповіді:


130

Це тому, що savefigзамінює кольори обличчя для фону фігури.

(Це насправді навмисно ... Припущення полягає в тому, що ви, мабуть, хочете керувати кольором тла збереженої фігури за допомогою facecolorkwarg savefig. Однак це заплутане і непослідовне за замовчуванням!)

Найпростіший обхідний шлях - це просто зробити fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(я вказую тут кольоровий край, оскільки за замовчуванням кольоровий край для фактичної фігури - білий, що дасть білу межу навколо збереженої фігури)

Сподіваюся, це допоможе!


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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.