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 — это стандарт индустрии.