Темы Seaborn: set_theme, стили и контекст графика
Пять тем Seaborn на один вызов: whitegrid для отчётов, darkgrid для экрана, ticks для строгих публикаций. Контекст talk укрупняет шрифты, despine снимает лишние линии рамки.
Редакция Питоники
Один и тот же график живёт в разных условиях: белый лист отчёта, тёмная тема сайта, проектор в конце переговорки. В Matplotlib каждую из этих картинок собирали вручную — фон, сетка, размеры шрифтов через rcParams. Seaborn сводит всё к одному вызову set_theme — и это последний базовый приём курса, после которого остаются только сами графики. Тема — это не про красоту, а про скорость: сетка, фон и шрифты уже согласованы, и вы не тратите на них вечер.
Пять тем на один вызов
Параметр style= функции set_theme принимает пять встроенных тем:
- darkgrid — серый фон, белые линии сетки; тема по умолчанию, на ней рисовали все уроки до этого;
- whitegrid — белый фон, серые линии сетки; мой выбор для отчётов и печати;
- dark — тёмный фон без сетки; тёмные темы интерфейсов;
- white — белый фон без сетки, минимализм;
- ticks — белый фон с чёрточками-делениями на осях; строгий научный стиль.
Названия сеток легко запомнить: первая часть — фон (dark или white), вторая — есть ли сетка (grid). Отдельно стоит ticks: сетки нет, зато осям возвращаются деления, по которым глазу проще считывать точные значения.
set_theme: тема на всю сессию
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sales = pd.DataFrame({
"city": ["Москва", "Казань", "Сочи", "Омск"],
"revenue": [330, 220, 190, 120],
})
sns.set_theme(style="whitegrid")
ax = sns.barplot(data=sales, x="city", y="revenue", errorbar=None)
ax.set_title("Средняя выручка по городам, тыс. руб.")
ax.set_ylabel("Тыс. руб.")
plt.show()
График отображается под редактором
Фон стал белым, сетка — серой: на печати и в PDF такой график выглядит аккуратнее серой плашки darkgrid. Важно, что set_theme сработал до построения: тема применяется ко всем последующим графикам сессии и не трогает уже нарисованные. Заглянем под капот и увидим, что тема — это просто набор настроек:
import seaborn as sns
# Заводская тема — darkgrid: сбросим её явно, чтобы блок был предсказуемым
sns.set_theme()
style = sns.axes_style()
print(style["axes.facecolor"], style["axes.grid"])
sns.set_theme(style="ticks")
print(sns.axes_style()["axes.facecolor"], sns.axes_style()["axes.grid"])
#EAEAF2 True white False
sns.axes_style() возвращает словарь текущей темы: цвет фона осей и флаг сетки. В darkgrid фон — светло-серый #EAEAF2, сетка включена; после set_theme(style="ticks") фон белый, а сетки нет. set_theme пишет эти значения в rcParams Matplotlib — те же настройки, которые в курсе Matplotlib меняли вручную, только согласованно и за один вызов.
| Тема | Фон | Сетка | Когда выбирать |
|---|---|---|---|
| darkgrid | Серый | Белая | Экран: сайт, ноутбук, дефолт set_theme() |
| whitegrid | Белый | Серая | Отчёты, PDF, печать |
| dark | Тёмный | Нет | Тёмные темы интерфейсов |
| white | Белый | Нет | Минимализм, плотные графики |
| ticks | Белый | Нет, есть деления | Публикации, точное считывание |
context: размер под носитель
Вторая ручка set_theme — параметр context=. Он не меняет стиль, а масштабирует шрифты и толщину линий под носитель: paper — мелко для журнальной статьи, notebook — стандарт, talk — крупно для выступления, poster — ещё крупнее для стендов. В notebook метки осей — 12 пунктов, в talk — уже 18: разница ровно та, что отличает график «читается с ноутбука» от графика «читается с заднего ряда».
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
week = pd.DataFrame({
"day": ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
"revenue": [42, 38, 45, 51, 66, 89, 74],
})
sns.set_theme(style="whitegrid", context="talk")
ax = sns.lineplot(data=week, x="day", y="revenue", marker="o")
ax.set_title("Выручка за неделю")
ax.set_xlabel("")
ax.set_ylabel("Тыс. руб.")
plt.show()
График отображается под редактором
Заголовок и цифры на осях заметно крупнее обычного — это и есть контекст talk. Практика простая: контекст выбирается по носителю, а не по вкусу — notebook для работы, talk для презентаций, poster для стенда. Проверить масштаб можно без рисования: sns.plotting_context("talk")["axes.labelsize"] вернёт 18.0.
despine: снять лишний декор
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sales = pd.DataFrame({
"city": ["Москва", "Казань", "Сочи", "Омск"],
"revenue": [330, 220, 190, 120],
})
sns.set_theme(style="white")
ax = sns.barplot(data=sales, x="city", y="revenue", errorbar=None)
sns.despine()
ax.set_title("Тема white и despine: ничего лишнего")
ax.set_ylabel("Тыс. руб.")
plt.show()
График отображается под редактором
sns.despine() срезал у рамки верхнюю и правую линии — остались только оси X и Y, по которым глаз и так считывает график. Высота столбца и так видна относительно сетки или соседей, так что коробка вокруг картинки ничего не добавляет. Хотите совсем чисто — despine(left=True) срежет и левую линию, оставив числа на оси висеть в воздухе: модный приём инфографики.
Что дальше
Вы умеете оформлять графики под носитель: тема задаёт фон и сетку, контекст — масштаб шрифтов, despine снимает декор. Дальше курс занимается содержанием цвета: следующий урок — палитры цветов, от категориальных наборов до палитры для дальтоников. А вернуться к любому графику курса можно по списку: самоучитель Seaborn.
set_theme меняет фон, сетку и шрифты одним вызовом для всех последующих графиков — тема пишется до рисования и живёт до конца сессии.
Сначала предскажи ответ в голове — это главный навык программиста.
import seaborn as sns
sns.set_theme() # сброс к заводской теме
print(sns.axes_style()["axes.facecolor"])
sns.set_theme(style="ticks")
print(sns.axes_style()["axes.grid"])
import seaborn as sns
ctx = sns.plotting_context("talk")
print(ctx["axes.labelsize"])
1. Какая тема включена в Seaborn по умолчанию?
2. Какие графики затронет вызов sns.set_theme(style="whitegrid")?
3. Для чего параметр context="talk"?
4. Что делает sns.despine()?
5. В отчёт для печати нужен белый фон и серая сетка. Какая тема?
Подготовьте график к слайду: включите тему whitegrid с контекстом talk, постройте lineplot выручки (данные в заготовке) и снимите лишний декор через sns.despine().
Какая тема Seaborn лучше для отчёта, а какая для презентации?
Для печати и PDF — whitegrid: белый фон с серой сеткой не даёт серых плашек на бумаге. Для экрана и ноутбука удобен дефолтный darkgrid. Носитель определяет параметр context: notebook для работы, talk — укрупнённые шрифты для проектора, poster — для стендов. Тема и контекст задаются в одном вызове set_theme.
Урок 6: lineplot — ряды и трендыЧем set_theme отличается от set_style?
set_style меняет только фон и сетку — стиль оформления. set_theme объединяет всё: стиль, контекст (масштаб шрифтов) и палитру за один вызов, поэтому в современных примерах используют именно его. sns.set_theme(style="ticks", context="talk") равен set_style + set_context + set_palette вместе взятым.
Как вернуть настройки графиков к исходным?
Повторный sns.set_theme() без аргументов возвращает заводские значения: тему darkgrid, контекст notebook и стандартную палитру. Тема живёт до следующего set_theme или до перезапуска интерпретатора — уже построенные фигуры при этом не перекрашиваются.
Почему set_theme не изменил уже построенный график?
Тема применяется к графикам, построенным после вызова: она пишет глобальные настройки, а не перерисовывает существующие фигуры. Правило: set_theme — первой строкой скрипта, до всех sns-вызовов. Если график уже нарисован, проще построить его заново после смены темы.
Понравился урок? Сошлитесь на него
«Тема — это не про красоту, а про скорость: сетка, фон и шрифты уже согласованы, и вы не тратите на них вечер.»
Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.
Что читать дальше
Seaborn · Урок 6
lineplot в Seaborn: ряды, тренды и полоса доверия
lineplot соединяет точки линией, когда по оси X идёт время: тренд, несколько городов на одном графике и полоса доверия вокруг среднего при повторных измерениях.
Seaborn · Урок 8
Палитры цветов в Seaborn: как подобрать цвета под задачу
Три типа палитр Seaborn, функция sns.color_palette(), безопасный набор colorblind и своя палитра из фирменных цветов — одна строка palette= на каждый случай.
Matplotlib / Seaborn · Урок 7
Стиль графиков в Matplotlib: стили, rcParams и оформление
Один вызов plt.style.use меняет лицо графика: встроенные стили, словарь rcParams, легенды, сетка, цвета и маркеры — собираем аккуратный график Matplotlib и показываем «до и после».
Похожие уроки по темам
Подобраны автоматически по пересечению тем и ключевых слов.
Matplotlib / Seaborn · Урок 6
Оформление графиков: легенды, аннотации, сетки и стили Matplotlib
Легенда, аннотации со стрелками, сетка, готовые стили и rcParams — доводим график Matplotlib до презентационного уровня и сохраняем в PNG для слайдов.
оформление графиков matplotlibстили matplotlib
openpyxl · Урок 5
Форматирование ячеек: шрифт, заливка и границы в openpyxl
Шапка прайса — жирный белый на синем, границы на всю таблицу: Font, PatternFill и Border, и главное правило — один стиль на весь диапазон.
openpyxl стили ячеекopenpyxl стили в цикле
Seaborn · Урок 17
Подписи, заголовки и аннотации: график Seaborn для отчёта
Seaborn строит график за строку, а отчёт требует заголовка, подписей осей, аннотации пика и файла в PNG. Собираем всё это через Matplotlib API — поверх любого sns-графика.
seaborn подписиseaborn заголовок графика