#python #matplotlib
#python #matplotlib
Вопрос:
Приветствия,
Я хочу изменить ВНЕШНИЙ цвет графика в matplotlib. Я могу найти МНОГО-МНОГО ПРИМЕРОВ того, как изменить внутренний bg-цвет, но внешний bg-цвет отказывается меняться.
Белая часть изображения — это то, что я подразумеваю под «внешним» фоном. Крайний внешний цвет предназначен только для того, чтобы ограничить белый цвет, чтобы он не сливался с фоном переполнения стека и не был частью графика. диаграмма.
Я пытался использовать set_facecolor()
, чтобы изменить его, но это не работает.
# Setting up data
x = list(history['daily'].keys())[-30*months:]
x_av = list(history['average'].keys())[-30*months:]
y = list(history['daily'].values())[-30*months:]
y_av = list(history['average'].values())[-30*months:]
# Setting up figure
fig = pyplot.figure()
fig.set_figheight(6)
fig.set_figwidth(12)
# Formatting figure
fig.patch.set_antialiased(True)
# Setting up axis
ax = fig.add_subplot(111, axisbg='#2e3136')
ax.plot(x, y, '#e1bb34', x_av, y_av, '#b2dbee')
# Formatting axis
ax.get_yaxis().grid(color='#3e4146', linestyle='-')
ax.get_xaxis().grid(color='#3e4146', linestyle='-')
ax.spines['bottom'].set_color('#1e2124')
ax.spines['top'].set_color('#1e2124')
ax.spines['left'].set_color('#1e2124')
ax.spines['right'].set_color('#1e2124')
ax.get_yaxis().set_major_formatter(ticker.FuncFormatter(lambda _y, p: '{:,}'.format(_y)))
ax.get_xaxis().set_major_formatter(ticker.FuncFormatter(lambda _x, p: datetime.fromtimestamp(_x/1000.0).strftime('%b %d')))
[i.set_color('white') for i in pyplot.gca().get_xticklabels()]
[i.set_color('white') for i in pyplot.gca().get_yticklabels()]
buf = BytesIO()
fig.savefig(buf, format='png', bbox_inches='tight')
pyplot.close()
buf.seek(0)
Ответ №1:
Вы должны быть в состоянии установить facecolor
в качестве kwarg значение savefig
, это гарантирует, что оно будет установлено при записи изображения.
fig.savefig(buf, format='png', bbox_inches='tight', facecolor='#2e3136')
Чтобы извлечь цвет из оси:
fig.savefig(buf, format='png', bbox_inches='tight', facecolor=ax.get_axis_bgcolor())