Настройка элементов графика

Очень редко встречается привычка "строить красивые графики - всегда" (даже у автора ее нет). Считается, что для личного использования можно над эстетикой графиков особо не усердствовать, а прикладывать усилия только для презентаций или публикаций. Во многом это связано с тем, что в Matplotlib создание красивых, хотя бы презентабельных графиков требует слишком много усилий. Но Seaborn, благодаря заготовленным темам, позволяет строить привлекательные графики всегда - хоть для себя, хоть для всех остальных.

Для дальнейших примеров, давайте выполним все необходимые импорты:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

И загрузим данные о пингвинах:

penguins = sns.load_dataset('penguins')
penguins.head()
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
0 Adelie Torgersen 39.1 18.7 181.0 3750.0 Male
1 Adelie Torgersen 39.5 17.4 186.0 3800.0 Female
2 Adelie Torgersen 40.3 18.0 195.0 3250.0 Female
3 Adelie Torgersen NaN NaN NaN NaN NaN
4 Adelie Torgersen 36.7 19.3 193.0 3450.0 Female

Стили графиков Seaborn

Для начала давайте взглянем на то как выглядит график с установленными по умолчанию настройками Matplotlib:

sns.scatterplot(data=penguins,
                x='body_mass_g',
                y='flipper_length_mm');

Внешний вид графика Seaborn с настройками по умолчанию

Что бы установить тему Seaborn, достаточно выполнить функцию set():

sns.set()

sns.scatterplot(data=penguins,
                x='body_mass_g',
                y='flipper_length_mm');

Внешний вид графика Seaborn после вызова функции set

Функция set() является псевдонимом другой функции set_theme(), которая помимо установки тем может выполнять еще несколько полезных настроек. Но сейчас нас интересует параметр style, который по умолчанию установлен в значение 'darkgrid'. После вызова данной функции все графики, даже графики построенные в Matplotlib, теперь будут нарисованы в этом стиле:

plt.scatter(penguins['body_mass_g'], penguins['flipper_length_mm'])
plt.show()

Внешний вид графика Matplotlib после вызова функции set

Темный фон больше подходит для легких элементов, таких как точки и линии. Для более тяжелых фигур лучше подходит светлый фон:

sns.set_style('whitegrid')
sns.boxenplot(x='species',
              y='body_mass_g',
              data=penguins);

Внешний вид графика Seaborn после установки стиля whitegrid

Если цель графика не состоит в извлечении количественной информации, то можно воспользоваться светлой и темной темами без числовых сеток:

sns.set_style('dark')
sns.stripplot(x='species',
              y='body_mass_g',
              data=penguins);

Внешний вид графика Seaborn после установки стиля dark

sns.set_style('white')
sns.boxenplot(x='species',
              y='body_mass_g',
              data=penguins);

Внешний вид графика Seaborn после установки стиля white

Еще один стиль просто добавляет тики к осям:

sns.set_style('ticks')
sns.scatterplot(x='bill_depth_mm',
                y='bill_length_mm',
                data=penguins);

Внешний вид графика Seaborn после установки стиля ticks


Настройка осей

Часто бывает нужно удалить некоторые оси, например те на которых нет числовых тиков:

sns.set_style('ticks')
sns.scatterplot(x='bill_depth_mm',
                y='bill_length_mm',
                data=penguins);

sns.despine()

Внешний вид графика Seaborn после вызова функции despine

При работе с категориальными данными, можно ограничить числовые оси:

sns.set_style('white')
sns.boxenplot(x='species',
              y='body_mass_g',
              data=penguins);

sns.despine(offset=20, 
            trim=True);

Внешний вид графика Seaborn после вызова функции despine с параметром trim

Можно указать какие оси должны быть удалены:

sns.set_style('white')
sns.boxenplot(x='species',
              y='body_mass_g',
              data=penguins);

sns.despine(bottom=True);

Внешний вид графика Seaborn после вызова функции despine с параметром bottom


Настройка стилей

Поскольку Seaborn построен на основе Matplotlib, то все стили Seaborn заданы с помощью функций Matplotlib. Что бы взглянуть какие функции использованы для текущего стиля можно воспользоваться функцией axes_style() без аргументов:

sns.axes_style()
{'axes.facecolor': 'white',
 'axes.edgecolor': '.15',
 'axes.grid': False,
 'axes.axisbelow': True,
 'axes.labelcolor': '.15',
 'figure.facecolor': 'white',
 'grid.color': '.8',
 'grid.linestyle': '-',
 'text.color': '.15',
 'xtick.color': '.15',
 'ytick.color': '.15',
 'xtick.direction': 'out',
 'ytick.direction': 'out',
 'lines.solid_capstyle': 'round',
 'patch.edgecolor': 'w',
 'patch.force_edgecolor': True,
 'image.cmap': 'rocket',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'DejaVu Sans',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'xtick.bottom': False,
 'xtick.top': False,
 'ytick.left': False,
 'ytick.right': False,
 'axes.spines.left': True,
 'axes.spines.bottom': True,
 'axes.spines.right': True,
 'axes.spines.top': True}

Далее, с помощью функции set_style() можно установить необходимые параметры стиля вручную:

sns.set_style('darkgrid',
              {'axes.facecolor': '0.8',
               'grid.color': '0.1',
               'figure.facecolor': '0.95'})

sns.stripplot(x='species',
              y='body_mass_g',
              data=penguins,
              edgecolor='k',
              linewidth=1);

Внешний вид графика Seaborn после настроек set_style

Если вам нужны более тонкие настройки, то можно воспользоваться функцией set_theme(), которая может принимать словарь любых параметров Matplotlib.