Как изменить цвет фона?

Я делаю точечный график в 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.colors

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))