seaborn vs matplotlib — в чём разница и когда что использовать

Коротко

matplotlib — базовая библиотека визуализации в Python, даёт полный контроль над каждым элементом графика. seaborn — надстройка над matplotlib для статистических визуализаций: красивые графики в одну строку кода. На собеседованиях спрашивают оба инструмента — важно понимать, когда какой уместнее.

Что такое matplotlib

matplotlib — низкоуровневая библиотека для построения графиков в Python. Создана в 2003 году, вдохновлена MATLAB. Работает по принципу «рисуем всё вручную»: создаёте фигуру, оси, добавляете данные, подписи, легенду.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 25, 15, 30, 20]

fig, ax = plt.subplots()
ax.bar(x, y, color='steelblue')
ax.set_title('Продажи по месяцам')
ax.set_xlabel('Месяц')
ax.set_ylabel('Выручка, тыс.')
plt.show()

Гибкость максимальная: можно настроить каждый пиксель. Но для типовых задач аналитика код получается многословным. Подробнее — в гайде matplotlib для аналитика.

Что такое seaborn

seaborn — высокоуровневая библиотека, построенная поверх matplotlib. Заточена под статистические визуализации и работу с DataFrame. Одна функция — и график готов с разумными стилями по умолчанию.

import seaborn as sns
import pandas as pd

df = pd.DataFrame({
    'month': [1, 2, 3, 4, 5],
    'revenue': [10, 25, 15, 30, 20]
})

sns.barplot(data=df, x='month', y='revenue')
plt.show()

seaborn автоматически добавляет приятные стили, работает напрямую с Pandas DataFrame и умеет считать статистику (доверительные интервалы, распределения).

Ключевые отличия

matplotlib seaborn
Уровень абстракции Низкий — рисуем вручную Высокий — вызываем функцию
Стили по умолчанию Базовые (серый фон, простые шрифты) Красивые из коробки
Работа с DataFrame Через массивы Нативная поддержка Pandas
Статистические графики Вручную Встроенные (boxplot, violinplot, heatmap)
Кастомизация Полная Ограниченная (но можно дотюнить через matplotlib)
Кривая обучения Крутая Пологая
Под капотом Самостоятельная Использует matplotlib

Когда использовать matplotlib

  • Нестандартные графики, которых нет в seaborn (аннотации, стрелки, кастомные легенды)
  • Дашборды с несколькими подграфиками (subplots) и сложной компоновкой
  • Точная настройка каждого элемента: шрифты, отступы, позиции осей
  • Анимации и интерактивные графики
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

axes[0].plot([1, 2, 3], [10, 20, 15], marker='o')
axes[0].set_title('Линейный')

axes[1].scatter([1, 2, 3], [10, 20, 15], s=100, c='coral')
axes[1].set_title('Точечный')

plt.tight_layout()
plt.show()

Когда использовать seaborn

  • Exploratory Data Analysis — быстро посмотреть распределения и зависимости
  • Статистические графики: boxplot, violin plot, heatmap корреляций
  • Визуализация категориальных данных
  • Когда нужен красивый график без возни со стилями
# Корреляционная матрица — одна строка
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')

# Распределение по группам
sns.boxplot(data=df, x='department', y='salary')

# Pairplot для EDA
sns.pairplot(df, hue='segment')

Больше примеров графиков — в статье типы графиков для аналитика.

Один график — два подхода

Задача: гистограмма распределения зарплат.

matplotlib:

import matplotlib.pyplot as plt

salaries = [45, 50, 55, 60, 65, 70, 55, 60, 50, 80]

fig, ax = plt.subplots()
ax.hist(salaries, bins=6, color='steelblue', edgecolor='white')
ax.set_title('Распределение зарплат')
ax.set_xlabel('Зарплата, тыс.')
ax.set_ylabel('Количество')
plt.show()

seaborn:

import seaborn as sns

salaries = [45, 50, 55, 60, 65, 70, 55, 60, 50, 80]

sns.histplot(salaries, bins=6, kde=True)
plt.title('Распределение зарплат')
plt.show()

seaborn добавляет KDE-кривую (оценку плотности) одним параметром kde=True. В matplotlib пришлось бы считать и рисовать её вручную.

Типичная ошибка

Начинающие пытаются кастомизировать seaborn-график только через seaborn. Но seaborn возвращает объект matplotlib — можно (и нужно) дотюнивать через plt или ax:

# Так работает
ax = sns.barplot(data=df, x='month', y='revenue')
ax.set_title('Мой заголовок')       # matplotlib API
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
plt.tight_layout()
plt.show()

seaborn и matplotlib не конкуренты — они работают вместе. seaborn строит график, matplotlib позволяет довести его до нужного вида.

Вопросы с собеседований

  • «Чем seaborn отличается от matplotlib?» — seaborn — высокоуровневая надстройка над matplotlib. Проще синтаксис, красивее стили по умолчанию, нативная работа с DataFrame и встроенная статистика. matplotlib даёт полный контроль, но требует больше кода.

  • «Можно ли использовать seaborn и matplotlib вместе?» — Да, это стандартная практика. seaborn строит график, а через matplotlib API (plt, ax) его кастомизируют: меняют заголовки, подписи осей, размер фигуры.

  • «Как построить heatmap корреляций?»sns.heatmap(df.corr(), annot=True, cmap='coolwarm'). annot=True показывает числа в ячейках, cmap задаёт цветовую палитру.

  • «Когда matplotlib лучше, чем seaborn?» — Когда нужен нестандартный график, сложная компоновка subplots, анимация или полная кастомизация каждого элемента. Для типовых статистических графиков seaborn быстрее и проще.

  • «Что такое KDE в seaborn?» — Kernel Density Estimation — оценка плотности распределения. В sns.histplot включается параметром kde=True, рисует сглаженную кривую поверх гистограммы.

Потренируйтесь отвечать на вопросы по Python в тренажёре или посмотрите 1500+ примеров вопросов.


Потренируйтесь решать задачи — откройте тренажёр с 1500+ вопросами для подготовки к собеседованиям аналитиков.

FAQ

Нужно ли учить matplotlib, если знаешь seaborn?

Да. seaborn покрывает типовые графики, но для кастомизации всё равно нужен matplotlib. На собеседованиях встречаются оба — умение переключаться между ними показывает глубину понимания.

Что быстрее — seaborn или matplotlib?

По производительности разницы почти нет — seaborn использует matplotlib под капотом. Разница в скорости написания кода: seaborn экономит время на типовых графиках.

Есть ли альтернативы?

Plotly — для интерактивных графиков в вебе. Altair — декларативный подход. Но на собеседованиях аналитика чаще всего спрашивают именно matplotlib и seaborn — это стандарт индустрии.