Зарегистрируйтесь, чтобы продолжить обучение

Библиотека Matplotlib Python: Визуализация данных

Для визуализации данных в Python есть ряд готовых библиотек — Matplotlib, Seaborn, Plotly, Pandas. Эти решения уже хорошо зарекомендовали себя в среде разработчиков и аналитиков. Этот список регулярно пополняется, но при этом среди всех библиотек стоит выделить Matplotlib. Многие решения считаются надстройкой над ней, наследуя ее ядро — базовые объекты и методы.

Matplotlib остается на бэкенде у многих библиотек и не используется для построения графиков отдельно от них. Это происходит, потому что аналитики хотят работать с более удобными инструментами визуализации и писать меньше кода для ее реализации.

При этом аналитик не может строить сложные графики с помощью более высокоуровневых библиотек, если он не знает основные принципы визуализации в Matplotlib. Поэтому в этом уроке мы разберем важные объекты этой библиотеки и методы их визуализации.

Импортирование библиотеки Matplotlib

Библиотека Matplotlib включает в себя множество модулей, которые отвечают за реализацию ее основных объектов: фигур, линий, стилей, шрифтов и других визуальных объектов. Обычно разработчикам не нужно глубоко погружаться во все нюансы реализации. Достаточно использовать модуль pyplot, который отвечает за реализацию визуализации.

Импорт модулей выглядит так:

import matplotlib as mpl
import matplotlib.pyplot as plt

Эти сокращения не обязательны, но они приняты в среде разработчиков, поэтому рекомендуем использовать их. После импорта необходимых модулей можно переходить к графикам. Начнем с базовых примеров с основными элементами.

Примеры простых графиков

Для построения графиков Matplotlib достаточно воспользоваться тремя методами:

  • Метод plt.plot() строит линейный график, но могут быть другие варианты
  • Метод plt.show() выводит график на экран
  • Метод plt.savefig() сохраняет график в файл, его можно использовать вместо plt.show()

Посмотрим, как это работает на практике:

x = [1, 2, 3, 4]
y = [10, 5, 15, 0]
plt.plot(x, y)
plt.show()

align=center

На этом графике показаны значения списков x и y. График линейный, поэтому точки на графике соединены отрезками. Чтобы добавить название конкретного графика и области, в которой он отрисован, воспользуемся следующими методами:

  • Метод plt.legend() отрисовывает название графика (легенду), указанное в параметре label метода plt.plot()
  • Метод plt.title() отрисовывает название области, само название передается параметром
plt.plot(x, y, label="plot")
plt.legend()
plt.title("Simple plot")
plt.show()

align=center

В области отрисовки может находиться не один график, а несколько. В примере ниже вы видите два графика с разными названиями:

y_shift = [val + 2 for val in y]

plt.plot(x, y, label="plot")
plt.plot(x, y_shift, label="plot + 2")
plt.legend()
plt.title("Simple plot")
plt.xlabel("x-values")
plt.ylabel("y-values")
plt.grid()
plt.show()

align=center

Еще на графике выше появились названия осей координат и координатная сетка. Это реализовано с использованием методов:

  • Для названия осей — plt.xlabel() и plt.ylabel()
  • Для координатной сетки plt.grid()

Прямое использование методов модуля plt упрощает работу с простыми графиками, но для более сложных объектов оно не подходит. Далее мы рассмотрим метод plt.subplots(), который позволяет гибко настраивать графики и работать с более сложными визуализациями.

Основные компоненты графика Matplotlib

Чтобы настроить визуальные представления в Matplotlib, воспользуемся методом plt.subplots(). Он возвращает два объекта:

  • Figure — полотно, на котором мы расположим всю визуализацию
  • Axes — области визуализации, на которых мы разместим все видимые объекты

В примере ниже вы увидите реализацию линейного графика с помощью метода plt.subplots(). Объект Figure присваивается переменной fig, а объект Axes — переменной ax. Отметим, что некоторые методы визуализации изменились на методы с префиксом set_:

  • set_title()
  • set_xlabel()
  • set_ylabel()

При этом метод plt.show() остался без изменения. Он отрисовывает фигуру со всеми областями визуализации:

fig, ax = plt.subplots()

ax.plot(x, y, label="plot")
ax.legend()
ax.set_title("Simple plot")
ax.set_xlabel("x-values")
ax.set_ylabel("y-values")
ax.grid()
plt.show()

align=center

Областей визуализации может быть несколько. Они располагаются в виде сетки, размеры которой задаются параметрами метода plt.subplots(nrows, ncols). В примере ниже показана сетка размером в одну строку и два столбца. Настройка размера всей фигуры и ее название можно реализовать методами fig.set_size_inches() и fig.suptitle() соответственно.

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

fig, axes = plt.subplots(1, 2)
fig.set_size_inches(8, 4)
fig.suptitle('Subplots example', fontsize=12)

axes[0].plot(x, y, label='plot')
axes[0].legend()
axes[0].set_title('Simple plot')
axes[0].set_xlabel('x-values')
axes[0].set_ylabel('y-values')
axes[0].grid()

axes[1].plot(x, y_shift, label='plot + 2')
axes[1].legend()
axes[1].set_title('Simple plot + 2')
axes[1].set_xlabel('x-values')``
axes[1].set_ylabel('y-values')
axes[1].grid()

plt.show()

align=center

Каждая область визуализации определяется индексом и настраивается отдельно друг от друга. На картинке область с индексом 0 содержит график plot, а область с индексом 1 — график plot + 2. Нумерация областей ведется слева направо и сверху вниз.

Последним примером в уроке рассмотрим дополнительные визуальные объекты на графиках и их конфигурации. Дополним реализацию следующими параметрами:

  • marker — форма отрисовки точки на графике
  • color — цвет линии графика
  • linestyle — стиль линии

Так это выглядит на практике:

fig, axes = plt.subplots(1, 2)
fig.set_size_inches(8, 4)
fig.suptitle("Subplots example", fontsize=12)

axes[0].plot(x, y, marker="v", color="r", label="plot")
axes[0].legend()
axes[0].set_title("Simple plot")
axes[0].set_xlabel("x-values")
axes[0].set_ylabel("y-values")
axes[0].grid()

axes[1].plot(x, y_shift, marker="o", c="g", linestyle="dashed", label="plot + 2")
axes[1].legend()
axes[1].set_title("Simple plot + 2")
axes[1].set_xlabel("x-values")
axes[1].set_ylabel("y-values")
axes[1].grid()
plt.show()

align=center

В этом примере мы собрали самые распространенные элементы визуализации, с помощью которых можно строить сложные представления в рамках одной фигуры:

  • Делать сетку графиков
  • Определять стили линий, подписей, осей и других визуальных элементов
  • Настраивать параметры отображения фигуры такие, как размер картинки и название

Выводы

В этом уроке мы познакомились с основными объектами библиотеки Matplotlib. Мы поговорили о следующих составных частях любого графика:

  • Figure
  • Axes
  • Artists (Axis, Line, Title, Legend)

Любой график — это фигура, на которой может быть располагаться несколько визуальных окружений с расположенными на нем визуальными объектами. Среди них:

  • Оси координат
  • Графики различных типов
  • Названия графиков
  • Линии и маркеры

Запомнить все подробности поможет эта схема:

alt=Anatomy

Здесь основные элементы выделены кругами с подписями и примером кода, который инициализирует или настраивает каждый элемент. Можно использовать ее как шпаргалку, а за дополнительными примерами обращаться к документации Matplotlib.

Когда вы разберетесь в том, как устроены фигуры библиотеки Matplotlib, вы сможете строить сложные графики с помощью Pyplot, ее внутреннего модуля. Также можно использовать методы других высокоуровневых библиотек, построенных на базе Matplotlib.


Самостоятельная работа

Разберите устройство фигур и областей визуализации Matplotlib. Склонируйте репозиторий с датасетами и подготовьте файлы Cite_clicks_week.csv и Shop_orders_restore.csv.

Импорт и подготовка

  1. Импортируйте pandas as pd, numpy as np, matplotlib.pyplot as plt.
  2. Загрузите Cite_clicks_week.csv, приведите даты к индексу, заполните пропуски методами fillna/interpolate.
  3. Считайте Shop_orders_restore.csv, сохраните списки значений по каждому магазину (tolist()), чтобы иметь разные типы входных данных.
  4. Создайте вспомогательные массивы np.array, словари {"day": ..., "shop_1": ...} и датафреймы — они понадобятся для тестов из README.

Работа с Figure и Axes

  1. Повторите базовые примеры: fig, ax = plt.subplots() + ax.plot() для одной серии, добавьте ax.set_title, set_xlabel, set_ylabel, ax.grid.
  2. Постройте сетку fig, axes = plt.subplots(2, 2, figsize=(12, 8), constrained_layout=True) и вынесите в каждый Axes отдельный магазин.
  3. Используйте fig.suptitle и fig.set_size_inches для задания общего заголовка и размеров, как показано в уроке.
  4. Сравните вывод через plt.show() и сохранение отдельных подграфиков fig.savefig("weekly_clicks.png").

Настройка линий и подписей

  1. Для одного Axes задайте стили линий (linestyle, linewidth, marker, color) и легенду ax.legend(), как в разделе «дополнительные визуальные объекты».
  2. Реализуйте вспомогательную функцию, которая принимает Axes и список серий, а внутри вызывает ax.plot(..., label=...) с форматированием.
  3. Используйте словари/датафреймы: ax.plot("day", "shop_1", data=data_dict) и тот же вызов с data=df, чтобы закрепить разные источники данных.
  4. Добавьте вторичную ось (ax.twinx()), чтобы сравнить суммарные клики с долями от максимума, проверьте корректность подписей.

Композиция нескольких графиков

  1. Сформируйте холст с двумя строками графиков: в первой строке линии, во второй — столбчатая диаграмма (ax.bar) и диаграмма рассеяния (ax.scatter).
  2. Используйте axes.ravel() для циклической настройки подписей, как советуется в README, и убедитесь, что порядковые номера осей не путают подписи.
  3. Вынесите общую легенду fig.legend(loc="upper center", ncol=4) и отключите отдельные легенды на Axes.
  4. Сохраните результат в векторном формате (fig.savefig("grid.svg", dpi=300)) и проверьте, что размеры соответствуют заданным.

Контроль / Что проверить

  • В работе использованы оба набора данных из репозитория, понятны этапы очистки и подготовки.
  • Все блоки повторяют приемы из README: plt.subplots, работа с Figure/Axes, настройка линий, легенд, сетки и размеров.
  • Есть примеры с различными источниками данных (списки, массивы, словари, DataFrame), и каждый корректно визуализирован.
  • Несколько графиков объединены на одной фигуре, общий заголовок и легенда работают корректно.
  • Полученные изображения сохраняются без ошибок, код выполняется и воспроизводит указанные шаги.

Дополнительные материалы

  1. Matplotlib — Gallery & Examples
  2. Anatomy of a Figure (official tutorial)
  3. Matplotlib Style Sheets

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff