Перейти к содержанию

252 уроков, 17 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 7 из 20 Средний 25 мин 110 XP

Темы 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: тема на всю сессию

Тема whitegrid для отчёта
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: разница ровно та, что отличает график «читается с ноутбука» от графика «читается с заднего ряда».

Контекст talk: слайд для выступления
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: снять лишний декор

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"])
Проверь себя
0 / 5

1. Какая тема включена в Seaborn по умолчанию?

2. Какие графики затронет вызов sns.set_theme(style="whitegrid")?

3. Для чего параметр context="talk"?

4. Что делает sns.despine()?

5. В отчёт для печати нужен белый фон и серая сетка. Какая тема?

Карточки терминов
Запомнено: 0 / 6
Практика

Подготовьте график к слайду: включите тему whitegrid с контекстом talk, постройте lineplot выручки (данные в заготовке) и снимите лишний декор через sns.despine().

practice.py
Вопросы и ответы по уроку

Какая тема 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-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.