Инструменты: 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 — интерактив для экрана и веба, не для бумаги.
- Выбор инструмента диктуется задачей: печать, интерактив или статистика.