Инструменты: matplotlib, seaborn, plotly

matplotlib — фундамент, seaborn — удобство для статистики, plotly — интерактив для веба.

В Python научную визуализацию закрывают три основных инструмента: matplotlib (низкоуровневый фундамент, полный контроль), seaborn (надстройка над ним для статистических графиков), plotly (интерактивные графики для веба и презентаций).

matplotlib: фундамент

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

Код matplotlib рисует на canvas и не печатает результат в текст — поэтому в нашем браузерном раннере он не исполняется (помечен как обычный текст). Запускайте его у себя локально.

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(4, 3))
ax.plot([1, 2, 3], [1, 4, 9], "o-")
ax.set_xlabel("x")
ax.set_ylabel("y = x^2")
fig.savefig("plot.pdf")   # рисует файл, ничего не печатает

seaborn: статистика из коробки

seaborn — надстройка над matplotlib для статистических графиков. То, что в matplotlib требует ручного кода (boxplot по группам, регрессия с доверительной полосой, тепловая карта корреляций, фасетки), в seaborn делается одной командой и сразу с приличными умолчаниями (включая viridis-подобные палитры). Это ускоряет разведочный анализ. Под капотом всё равно matplotlib, поэтому результат можно дошлифовать его средствами.

import seaborn as sns

# boxplot по группам — одна строка
sns.boxplot(data=df, x="group", y="value")
# регрессия с 95% доверительной полосой
sns.regplot(data=df, x="dose", y="response")
# фасетки автоматически
sns.relplot(data=df, x="t", y="y", col="experiment")

plotly: интерактив

plotly строит интерактивные графики (зум, наведение, вращение 3D, переключение серий) для веба и презентаций. Для разведки больших данных и для докладов это удобно: можно покрутить 3D-поверхность или навести курсор и прочитать точное значение. Но для печатной статьи интерактив бесполезен (бумага статична), а вектор-экспорт у plotly хуже, чем у matplotlib. Вывод: plotly — для экранов, matplotlib — для бумаги.

ИнструментСильная сторонаКогда
matplotlibполный контроль, лучший векторпубликационные фигуры
seabornстатграфики одной строкойразведка, статистика
plotlyинтерактив, 3D, вебпрезентации, дашборды, exploration

Выбираем инструмент логикой

Сформулируем правило выбора как функцию — это резюме урока.

def choose_tool(need_interactive, statistical, for_print):
    if for_print:
        return "matplotlib (+seaborn для статистики) -> вектор PDF"
    if need_interactive:
        return "plotly (зум, hover, 3D для экрана/веба)"
    if statistical:
        return "seaborn (быстрые статграфики)"
    return "matplotlib (универсально)"

print(choose_tool(False, True, True))
print(choose_tool(True, False, False))
print(choose_tool(False, True, False))

Вывод:

matplotlib (+seaborn для статистики) -> вектор PDF
plotly (зум, hover, 3D для экрана/веба)
seaborn (быстрые статграфики)

Как работает под капотом

seaborn не заменяет matplotlib, а вызывает его: каждая seaborn-функция возвращает matplotlib-объекты (Axes), которые можно дальше настраивать. plotly же — отдельный стек, рендерящий в браузере через JavaScript (библиотека D3), поэтому он интерактивен, но завязан на веб-движок. Понимание этой иерархии важно: освоив matplotlib, вы понимаете и seaborn, а plotly держите для случаев, где нужен именно интерактив.

Экосистема за пределами трёх

Тремя инструментами мир не исчерпывается, и полезно знать соседей. В Python есть Altair — декларативная библиотека на основе грамматики графики (Vega-Lite), удобная для быстрых интерактивных графиков из данных в pandas. В мире R царит ggplot2 — эталонная реализация грамматики графики, на которую многие равняются. Для специализированных задач есть свои инструменты: Bokeh и HoloViews для интерактивных дашбордов, datashader для миллиардов точек, ParaView и VTK для научной 3D-визуализации полей и объёмов.

Но для подавляющего большинства научных задач связки matplotlib + seaborn достаточно, и вкладываться стоит прежде всего в неё: matplotlib — самый зрелый, документированный и принятый журналами инструмент, а навык его тонкой настройки переносится и на другие библиотеки (многие строят поверх него). Plotly держите для случаев, где интерактив реально нужен — разведка многомерных данных, доклад с вращением 3D, веб-дашборд. Принцип тот же, что с выбором графика: инструмент подбирается под задачу, а не под моду.

Частые ошибки

  • plotly для печатной статьи — интерактив на бумаге бесполезен, вектор хуже.
  • Ручной matplotlib там, где seaborn сделает строкой — лишний код и риск ошибок.
  • Считать seaborn отдельной библиотекой — это надстройка, результат дошлифовывается matplotlib.
  • Гнаться за «модным» инструментом вместо выбора под задачу (печать/экран/статистика).

Итог

  • matplotlib — фундамент и лучший выбор для публикационных векторных фигур.
  • seaborn — надстройка для статграфиков одной строкой.
  • plotly — интерактив для экрана и веба, не для бумаги.
  • Выбор инструмента диктуется задачей: печать, интерактив или статистика.
Проверьте себя
1. Какой инструмент — стандарт для публикационных фигур с лучшим векторным экспортом?
Aplotly
Bmatplotlib
Cтолько seaborn
DExcel
2. Что такое seaborn по отношению к matplotlib?
AПолная замена matplotlib
BНадстройка над matplotlib для статистических графиков с хорошими умолчаниями
CОтдельный язык
DФормат файла
3. Когда уместен plotly, а не matplotlib?
AДля печатной статьи
BКогда нужен интерактив (зум, hover, вращение 3D) на экране или в вебе
CВсегда
DНикогда