Как изменить цвет фона?
Я делаю точечный график в matplotlib и мне нужно изменить фон реального графика на черный. Я знаю, как изменить цвет лица на графике, используя:
fig = plt.figure()
fig.patch.set_facecolor('xkcd:mint green')
![enter image description here]()
Моя проблема в том, что это меняет цвет пространства вокруг сюжета. Как изменить фактический цвет фона сюжета?
Ответы
Ответ 1
Используйте метод set_facecolor(color)
объекта axes
, который вы создали одним из следующих способов:
-
Вы создали фигуру и ось вместе
fig, ax = plt.subplots(nrows=1, ncols=1)
-
Вы создали фигуру, а затем ось/оси
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
-
Вы использовали API с сохранением состояния (если вы делаете что-то больше, чем несколько строк, и особенно если у вас есть несколько графиков, описанные выше объектно-ориентированные методы упрощают жизнь, поскольку вы можете ссылаться на конкретные фигуры, строить графики на определенных осях и настраивать или)
plt.plot(...)
ax = plt.gca()
Тогда вы можете использовать set_facecolor
:
ax.set_facecolor('xkcd:salmon')
ax.set_facecolor((1.0, 0.47, 0.42))
![example plot with pink background on the axes]()
Как освежить, какие цвета могут быть:
Matplotlib распознает следующие форматы для определения цвета:
- RGB или RGBA кортеж значений с плавающей запятой в
[0, 1]
(например, (0.1, 0.2, 0.5)
или (0.1, 0.2, 0.5, 0.3)
); - шестнадцатеричная строка RGB или RGBA (например,
'#0F0F0F'
или '#0F0F0F0F'
); - строковое представление значения с плавающей точкой в
[0, 1]
включительно для уровня серого (например, '0.5'
); - один из
{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
; - имя цвета X11/CSS4;
- имя из цветового опроса xkcd; с префиксом
'xkcd:'
(например, 'xkcd:sky blue'
); - один из
{'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}
- это цвета таблиц из категориальной палитры T10 (цветовой цикл по умолчанию); - спецификация цвета "CN", то есть "C", за которой следует одна цифра, которая является индексом в цикле свойств по умолчанию (
matplotlib.rcParams['axes.prop_cycle']
); индексирование происходит во время создания художника и по умолчанию становится черным, если цикл не включает цвет.
Все строковые спецификации цвета, кроме "CN", не чувствительны к регистру.
Ответ 2
Что-то вроде этого? Используйте ключевое слово axisbg
для subplot
:
>>> from matplotlib.figure import Figure
>>> from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
>>> figure = Figure()
>>> canvas = FigureCanvas(figure)
>>> axes = figure.add_subplot(1, 1, 1, axisbg='red')
>>> axes.plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x2827e50>]
>>> canvas.print_figure('red-bg.png')
(Разумеется, это не график рассеяния, а не черный фон.)
![enter image description here]()
Ответ 3
Один из способов - вручную установить значение по умолчанию для цвета фона оси в вашем script (см. Настройка matplotlib):
import matplotlib.pyplot as plt
plt.rcParams['axes.facecolor'] = 'black'
Это отличается от метода Nick T, который меняет цвет фона для определенного объекта axes
. Сброс настроек по умолчанию полезен, если вы создаете несколько разных графиков со схожими стилями и не хотите изменять разные объекты axes
.
Примечание: эквивалент для
fig = plt.figure()
fig.patch.set_facecolor('black')
из вашего вопроса:
plt.rcParams['figure.facecolor'] = 'black'
Ответ 4
Если у вас уже есть объект axes
, как в Nick T answer, вы также можете использовать
ax.patch.set_facecolor('black')
Ответ 5
Одно из предложений в других ответах - использовать ax.set_axis_bgcolor("red")
. Это, однако, является устаревшим и не работает на MatPlotLib> = v2.0.
Также предлагается использовать ax.patch.set_facecolor("red")
(работает как на MatPlotLib v1.5, так и на v2.2). Хотя это работает нормально, еще более простое решение для v2. 0+ заключается в использовании
ax.set_facecolor("red")
Ответ 6
Самое простое, вероятно, предоставить цвет при создании графика:
fig1 = plt.figure(facecolor=(1, 1, 1))
или же
fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))