Matplotlib рисунок лицевой цвет (цвет фона) - PullRequest
63 голосов
/ 26 января 2011

Может кто-нибудь объяснить, почему приведенный ниже код не работает при установке цвета лица фигуры?

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").Однако настройка цвета лица не подобрана.Почему?

Спасибо за вашу помощь.

Ответы [ 3 ]

91 голосов
/ 26 января 2011

Это потому, что savefig переопределяет цвет лица для фона фигуры.

(Это на самом деле преднамеренно ... Предполагается, что вы, вероятно, захотите контролировать цвет фона сохраненной фигуры с помощью facecolor kwarg до savefig. Это сбивает с толку и противоречиво, хотя!)

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

Надеюсь, это поможет!

22 голосов
/ 23 ноября 2013

Мне пришлось использовать прозрачное ключевое слово, чтобы получить цвет, который я выбрал с моим начальным

fig=figure(facecolor='black')

как это:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)
19 голосов
/ 27 августа 2016

savefig имеет свой собственный параметр для facecolor.Я думаю, что даже более простой способ, чем принятый ответ, состоит в том, чтобы установить их глобально только один раз , вместо того, чтобы ставить facecolor=fig.get_facecolor() каждый раз:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...