- Импортирование библиотеки Matplotlib
- Примеры простых графиков
- Основные компоненты графика Matplotlib
- Выводы
Для визуализации данных в 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()
На этом графике показаны значения списков x и y. График линейный, поэтому точки на графике соединены отрезками. Чтобы добавить название конкретного графика и области, в которой он отрисован, воспользуемся следующими методами:
- Метод
plt.legend()отрисовывает название графика (легенду), указанное в параметреlabelметодаplt.plot() - Метод
plt.title()отрисовывает название области, само название передается параметром
plt.plot(x, y, label="plot")
plt.legend()
plt.title("Simple plot")
plt.show()
В области отрисовки может находиться не один график, а несколько. В примере ниже вы видите два графика с разными названиями:
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()
Еще на графике выше появились названия осей координат и координатная сетка. Это реализовано с использованием методов:
- Для названия осей —
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()
Областей визуализации может быть несколько. Они располагаются в виде сетки, размеры которой задаются параметрами метода 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()
Каждая область визуализации определяется индексом и настраивается отдельно друг от друга. На картинке область с индексом 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()
В этом примере мы собрали самые распространенные элементы визуализации, с помощью которых можно строить сложные представления в рамках одной фигуры:
- Делать сетку графиков
- Определять стили линий, подписей, осей и других визуальных элементов
- Настраивать параметры отображения фигуры такие, как размер картинки и название
Выводы
В этом уроке мы познакомились с основными объектами библиотеки Matplotlib. Мы поговорили о следующих составных частях любого графика:
FigureAxesArtists (Axis, Line, Title, Legend)
Любой график — это фигура, на которой может быть располагаться несколько визуальных окружений с расположенными на нем визуальными объектами. Среди них:
- Оси координат
- Графики различных типов
- Названия графиков
- Линии и маркеры
Запомнить все подробности поможет эта схема:
Здесь основные элементы выделены кругами с подписями и примером кода, который инициализирует или настраивает каждый элемент. Можно использовать ее как шпаргалку, а за дополнительными примерами обращаться к документации Matplotlib.
Когда вы разберетесь в том, как устроены фигуры библиотеки Matplotlib, вы сможете строить сложные графики с помощью Pyplot, ее внутреннего модуля. Также можно использовать методы других высокоуровневых библиотек, построенных на базе Matplotlib.
Самостоятельная работа
Разберите устройство фигур и областей визуализации Matplotlib. Склонируйте репозиторий с датасетами и подготовьте файлы Cite_clicks_week.csv и Shop_orders_restore.csv.
Импорт и подготовка
- Импортируйте
pandas as pd,numpy as np,matplotlib.pyplot as plt. - Загрузите
Cite_clicks_week.csv, приведите даты к индексу, заполните пропуски методамиfillna/interpolate. - Считайте
Shop_orders_restore.csv, сохраните списки значений по каждому магазину (tolist()), чтобы иметь разные типы входных данных. - Создайте вспомогательные массивы
np.array, словари{"day": ..., "shop_1": ...}и датафреймы — они понадобятся для тестов из README.
Работа с Figure и Axes
- Повторите базовые примеры:
fig, ax = plt.subplots()+ax.plot()для одной серии, добавьтеax.set_title,set_xlabel,set_ylabel,ax.grid. - Постройте сетку
fig, axes = plt.subplots(2, 2, figsize=(12, 8), constrained_layout=True)и вынесите в каждый Axes отдельный магазин. - Используйте
fig.suptitleиfig.set_size_inchesдля задания общего заголовка и размеров, как показано в уроке. - Сравните вывод через
plt.show()и сохранение отдельных подграфиковfig.savefig("weekly_clicks.png").
Настройка линий и подписей
- Для одного Axes задайте стили линий (
linestyle,linewidth,marker,color) и легендуax.legend(), как в разделе «дополнительные визуальные объекты». - Реализуйте вспомогательную функцию, которая принимает Axes и список серий, а внутри вызывает
ax.plot(..., label=...)с форматированием. - Используйте словари/датафреймы:
ax.plot("day", "shop_1", data=data_dict)и тот же вызов сdata=df, чтобы закрепить разные источники данных. - Добавьте вторичную ось (
ax.twinx()), чтобы сравнить суммарные клики с долями от максимума, проверьте корректность подписей.
Композиция нескольких графиков
- Сформируйте холст с двумя строками графиков: в первой строке линии, во второй — столбчатая диаграмма (
ax.bar) и диаграмма рассеяния (ax.scatter). - Используйте
axes.ravel()для циклической настройки подписей, как советуется в README, и убедитесь, что порядковые номера осей не путают подписи. - Вынесите общую легенду
fig.legend(loc="upper center", ncol=4)и отключите отдельные легенды на Axes. - Сохраните результат в векторном формате (
fig.savefig("grid.svg", dpi=300)) и проверьте, что размеры соответствуют заданным.
Контроль / Что проверить
- В работе использованы оба набора данных из репозитория, понятны этапы очистки и подготовки.
- Все блоки повторяют приемы из README:
plt.subplots, работа сFigure/Axes, настройка линий, легенд, сетки и размеров. - Есть примеры с различными источниками данных (списки, массивы, словари,
DataFrame), и каждый корректно визуализирован. - Несколько графиков объединены на одной фигуре, общий заголовок и легенда работают корректно.
- Полученные изображения сохраняются без ошибок, код выполняется и воспроизводит указанные шаги.
Дополнительные материалы
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.