Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Matplotlib и Seaborn: графики на Python для отчёта и исследования — что выбрать и как научиться

Matplotlib и Seaborn — две бесплатные библиотеки Python для статичных графиков, то есть картинок для отчёта, статьи или презентации. Matplotlib рисует всё: создаёт полотно (Figure), размещает на нём области с осями (Axes), проводит линии, подписывает оси и сохраняет результат в PNG, SVG или PDF. Seaborn работает поверх Matplotlib и одной функцией строит статистический график по таблице: распределение, сравнение групп, среднее с интервалом. Чаще всего их используют вместе: Seaborn считает и рисует, Matplotlib доводит рисунок до отчёта. Для старта нужен базовый Python.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Matplotlib и Seaborn: графики на Python для отчёта и исследования — что выбрать и как научиться

Выбирать одну из двух библиотек обычно не приходится, и это главное недоразумение новичков. Seaborn не заменяет Matplotlib, а возвращает его же объекты: после вызова sns.boxplot у вас в руках обычная область Axes, которой можно поменять подписи, пределы шкалы и размер шрифта.

Кто за что отвечает и когда нужен другой инструмент

Matplotlib нужен, когда важен полный контроль: две панели с общей осью, подпись у конкретной точки, линия плана, размер рисунка под колонку журнала. Seaborn экономит время на разведочном анализе: аналитик передаёт таблицу и названия столбцов, а библиотека сама группирует данные, считает средние и интервалы и раскрашивает группы через параметр hue. Тема оформления задаётся одной командой sns.set_theme и действует и на графики Matplotlib.

Если график будут исследовать — наводить курсор, скрывать ряды, — удобнее Plotly, а регулярный отчёт для отдела лучше собрать в BI-системе. Выбор формы графика, осей и цвета от библиотеки не зависит и разобран в нашем материале о визуализации данных.

Figure и Axes: почему pyplot подводит

У Matplotlib два способа писать код. Неявный интерфейс pyplot запоминает последнее созданное полотно и последнюю область и рисует туда: plt.plot, plt.title, plt.savefig. В документации Matplotlib его называют удобным для интерактивной работы и простых скриптов. Явный, объектный интерфейс начинается со строки fig, ax = plt.subplots(): вы получаете ссылки на полотно и область и дальше вызываете методы именно у них — ax.plot, ax.set_title, fig.savefig.

Разница видна на втором графике. Если рисунок состоит из двух панелей и подпись нужна левой, хотя последней создавалась правая, pyplot подпишет «текущую» область. Документация советует быть явным с самого начала и сохранять ссылку на каждую область. Многие библиотеки, включая Seaborn, принимают параметр ax и рисуют в переданную им область.

Учебный пример: сроки доставки по складам

Ситуация вымышленная. У аналитика есть таблица заказов за квартал: склад, способ доставки, срок в днях. Руководитель просит понять, какой склад задерживает заказы и касается ли это курьерской доставки.

Аналитик создаёт полотно с двумя панелями: fig, axes = plt.subplots(1, 2, figsize=(10, 4), sharey=True). В левую панель Seaborn рисует «ящик с усами» — sns.boxplot(data=orders, x=»склад», y=»срок», hue=»способ», ax=axes[0]): у второго склада медиана выше и много задержек больше недели. В правую — sns.barplot по тем же столбцам со средним сроком. Затем средствами Matplotlib аналитик проводит методом axhline линию норматива в три дня, подписывает оси по-русски и делает заголовок выводом: «Второй склад задерживает курьерские заказы». Рисунок уходит в отчёт в PNG для письма и в SVG для вёрстки.

На правой панели у каждого столбца появляются чёрные «усы», и в отчёте их нужно правильно назвать.

Что показывают «усы» на столбцах Seaborn

По справке функции barplot для текущей версии Seaborn 0.13.2 высота столбца по умолчанию — среднее (estimator=’mean’), а отрезок над ним задан параметром errorbar=(‘ci’, 95), то есть это 95-процентный доверительный интервал, а не стандартное отклонение. Считается он бутстрепом: n_boot=1000 повторных выборок, seed=None.

Из руководства Seaborn по интервалам следуют три вещи. Бутстреп случаен, и «усы» немного отличаются при каждом запуске — одинаковый результат даёт только заданный seed. Интервал и разброс — разные величины: доверительный интервал и стандартная ошибка показывают, насколько точно оценено среднее, и сужаются с ростом выборки, а стандартное отклонение (errorbar=»sd») и процентильный интервал («pi») описывают разброс самих данных, который от числа наблюдений не уменьшается. Наконец, на больших таблицах бутстреп считается долго, и там руководство советует показывать разброс.

В примере с доставкой это меняет смысл рисунка. Узкие «усы» у второго склада при тысячах заказов значат только то, что средний срок оценён точно, а не то, что все заказы приходят в один и тот же день. Если руководитель прочитает их как разброс, он недооценит задержки. Поэтому в коде стоит явно задавать errorbar и seed, а в подписи к рисунку — указывать, что показано. Тот же параметр есть у всех функций Seaborn, которые усредняют данные, в том числе у lineplot.

Сохранение для отчёта: размер, dpi, формат и кириллица

Размер рисунка Matplotlib задаётся в дюймах, а разрешение — в точках на дюйм. В образце файла настроек Matplotlib 3.11 по умолчанию стоят figure.figsize 6.4 × 4.8 дюйма и figure.dpi 100, то есть PNG получается 640 × 480 пикселей. Для печати разрешение обычно поднимают: fig.savefig(«dostavka.png», dpi=300, bbox_inches=»tight») — последний параметр обрезает лишние поля. Формат выбирается по расширению файла.

SVG и PDF — векторные форматы, они масштабируются без потери качества. У SVG есть особенность: по описанию шрифтов в документации параметр svg.fonttype по умолчанию равен ‘path’, и текст сохраняется контурами. Рисунок выглядит одинаково на любом компьютере, но подпись нельзя исправить в редакторе. Значение ‘none’ оставляет текст текстом, но вид будет зависеть от шрифтов у того, кто открывает файл.

С кириллицей Matplotlib справляется без настройки: шрифт по умолчанию DejaVu Sans покрывает большинство европейских систем письма. Квадраты вместо букв появляются, когда автор ставит фирменный шрифт без кириллических знаков. С версии 3.6 в параметре family можно передать список шрифтов, и каждый символ берётся из первого шрифта, где он есть.

С чего начать и в каком порядке осваивать

Порядок шагов определяется зависимостями. Seaborn возвращает объекты Matplotlib, поэтому без понимания Figure и Axes любая правка готового графика превращается в поиск по форумам. Статистические графики стоит строить, когда вы умеете подписать и разместить простые, а экспорт — освоить до первого настоящего отчёта.

  1. Matplotlib: plt.subplots, методы plot, bar, scatter, hist у объекта ax, подписи осей и заголовок.
  2. Несколько панелей: subplots с sharex и sharey, общий заголовок, легенда.
  3. Seaborn на уровне областей: histplot, boxplot, barplot, scatterplot с параметрами hue и ax.
  4. Параметр errorbar и подпись к рисунку о том, что показано.
  5. Темы: sns.set_theme и стили Matplotlib.
  6. Экспорт: savefig с dpi и bbox_inches, выбор между PNG, SVG и PDF.

Всё это удобно пробовать в Jupyter или Colab, где рисунок появляется под ячейкой. Если нужна программа с проверкой заданий, на онлайн-курсе Брунояма «Аналитик данных» в блоке Python для анализа есть модуль «визуализация через matplotlib и seaborn». Шесть месяцев, вебинары в группах по 10–12 человек, 14 практических кейсов. На базовом тарифе работы не проверяют, а срок скидки на странице уже прошёл, так что цену уточняйте у школы.

Открыть курс «Аналитик данных»

Упражнения и типичные ошибки

Хорошая тренировка — один рисунок тремя способами: через pyplot, через fig, ax = plt.subplots() и через sns.barplot с параметром ax. Сравните, где проще поменять подпись и цвет одного столбца. Второе упражнение: постройте barplot с errorbar=(«ci», 95), «se» и «sd» на одной таблице, запустите ячейку дважды без seed и объясните, почему меняются только первые «усы».

Новички чаще всего путают функции уровня области и уровня полотна. sns.relplot, sns.displot и sns.catplot сами создают полотно с сеткой панелей и не принимают ax, поэтому попытка вставить их в заранее созданную панель не работает. Ещё одна частая ошибка — вызов plt.savefig после plt.show() в скрипте: в файл попадает пустое полотно. Проверить результат просто: уменьшите рисунок до размера колонки отчёта и спросите коллегу, что означает отрезок над столбцом.

Чему учат на курсах

Отдельных онлайн-курсов только по Matplotlib или Seaborn в нашем каталоге нет: обе библиотеки входят в программы по анализу данных как часть блока Python.

На онлайн-курсе Skillbox «Data Analyst с нуля до Junior» Matplotlib и Plotly названы среди инструментов рядом с Python, SQL, Excel и Power BI, а Python используют для загрузки, очистки, анализа и визуализации данных. Обучение рассчитано на девять месяцев, задания проверяет куратор-практик, в программе два итоговых проекта. Seaborn на странице не упомянут, отдельного модуля по графикам в описании нет.

Открыть курс «Data Analyst с нуля до Junior»

Обращайте внимание, как именно библиотека попала в описание. Строка в перечне инструментов может означать и несколько уроков, и одно задание. Модуль с названием и числом уроков надёжнее, а лучше всего — пример выпускного проекта, где видны графики и подписи к ним.

На онлайн-курсе Skillfactory «Специалист по анализу данных» Matplotlib входит в стек вместе с Pandas, NumPy и Scikit-learn, а первый модуль посвящён Python, очистке данных и разведочному анализу. Заявлено 650 академических часов и срок «от 9 месяцев», работы проверяют менторы-аналитики. Seaborn в описании не назван, а один из пяти проектов посвящён визуализации в Excel, так что глубину работы с графиками на Python стоит уточнить у школы.

Открыть курс «Специалист по анализу данных»

Как навык влияет на доход

Открытых данных о надбавке за Matplotlib или Seaborn найти не удалось: зарплатные обзоры считают по профессиям, а не по библиотекам. Это часть стека аналитика рядом с pandas и SQL, и сама по себе библиотека зарплату не определяет.

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

Как выбрать обучение

Если Python для вас новый, ищите программу, где графики проверяет человек: автотест подтвердит, что рисунок построен, но не скажет, что «усы» подписаны неверно. Если Python знаком, ради двух библиотек курс не нужен — хватит документации и отчёта на своих данных. Сравнить онлайн-школы, которые учат анализу данных целиком, можно по рейтингу онлайн-школ с обучением анализу данных: это общий рейтинг направления, а не подборка по Matplotlib, поэтому программу каждого курса сверяйте со своей задачей.