Як змінити колір тла сюжету?


226

Я роблю ділянку розкидання в matplotlib і мені потрібно змінити фон фактичного сюжету на чорний. Я знаю, як змінити колір обличчя сюжету, використовуючи:

fig = plt.figure()
fig.patch.set_facecolor('xkcd:mint green')

введіть тут опис зображення

Моє питання полягає в тому, що це змінює колір простору навколо ділянки. Як змінити фактичний колір фону сюжету?


9
Просто FYI, на додаток до того, що сказав @Evert, ви можете просто використовувати ax.patch.set_facecolor('black')(де axекземпляр осей). fig.patch- фон фігури і ax.patchфон осей.
Джо Кінгтон

Відповіді:


230

Скористайтеся 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))

Приклад сюжету з рожевим фоном на осях

Як освіжувач, якими кольорами можуть бути:

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');
  • рядкове подання значення float [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'}них - кольори Tableau з категоріальної палітри "T10" (це кольоровий цикл за замовчуванням);
  • кольоровий специфікатор "CN", тобто "C", який супроводжується однією цифрою, що є індексом циклу властивостей за замовчуванням ( matplotlib.rcParams['axes.prop_cycle']); індексування відбувається під час створення виконавця та за замовчуванням - чорне, якщо цикл не включає колір.

Усі строкові специфікації кольору, крім "CN", не залежать від регістру.


Якщо є якийсь інший поширений спосіб генерації осей, дайте мені знати.
Нік Т

Схоже, цей метод зник в певний момент за останні 3 роки ... MethodNotFound
Деміс

@ Деміс цей метод додали в останні роки. Про те, як це зробити у старих версіях, див . Відповідь ImportanceOfBeingEarnest .
Нік Т

47

Один з методів - це вручну встановити за замовчуванням колір тла осі у вашому сценарії (див. Налаштування matplotlib ):

import matplotlib.pyplot as plt
plt.rcParams['axes.facecolor'] = 'black'

Це на відміну від методу Ніка Т., який змінює колір фону для конкретного axesоб'єкта. Скидання за замовчуванням корисно, якщо ви створюєте кілька різних ділянок з подібними стилями і не хочете продовжувати змінювати різні axesоб'єкти.

Примітка: еквівалент для

fig = plt.figure()
fig.patch.set_facecolor('black')

з вашого питання:

plt.rcParams['figure.facecolor'] = 'black'


41

Щось на зразок цього? Використовуйте 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')

(Звичайно, це не розкиданий сюжет і не чорний фон.)

введіть тут опис зображення


3
Я мав успіх plt.subplot('111', axisbg='black')перед створенням команд, використовуючи Windows.
heltonbiker

10
axis_bg axis_bgcolorБули застарілі в Matplotlib 2.0.0 і видалений в Matplotlib 2.2.0
RubenLaguna


12

Одна пропозиція в інших відповідях - використовувати ax.set_axis_bgcolor("red"). Однак це застаріло і не працює на MatPlotLib> = v2.0.

Існує також пропозиція використовувати ax.patch.set_facecolor("red")(працює як на MatPlotLib v1.5, так і на v2.2). Хоча це працює чудово, ще простіше рішення для v2.0 + полягає у використанні

ax.set_facecolor("red")


FYI, ax.set_axis_bgcolor("black")працює на Python v2.7.14 / MPL v1.5.1, але ax.set_facecolor()це не так. Десь між MPL v1.5.1 та v2.2.0 перемкнулася відповідна функція.
Деміс

1
@Demis Якщо вам потрібне рішення, яке працює у всіх версіях, використовуйте ax.patch.set_facecolor("red"). Горіх з matplotlib 2.0 рекомендованим способом є ax.set_facecolor.
ВажливістьBeingErnest

4

Найпростіше, мабуть, надати колір під час створення сюжету:

fig1 = plt.figure(facecolor=(1, 1, 1))

або

fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))

Це змінює лише колір фону вікна, а не власне колір сюжету
Том Купіс,

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