$ sudo teach IT

Файл для практики.

month,sales,profit,orders,customers
1,12000,3000,120,25
2,14500,3900,145,27
3,16800,4700,172,33
4,15500,4300,160,31
5,21500,6800,235,46
6,23800,7600,260,51
7,25200,8200,275,55
8,24100,7800,268,53
9,28600,9400,325,64
10,27800,9100,315,61
11,32400,10800,370,73
12,35800,12300,425,84

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

Представьте, что вам необходимо подготовить отчет по продажам интернет-магазина. Руководителю недостаточно увидеть только динамику выручки. Ему может быть интересно посмотреть распределение заказов по категориям, сравнить продажи по регионам и оценить изменение прибыли по месяцам.

Создавать отдельное окно для каждого графика неудобно. Гораздо практичнее разместить несколько визуализаций на одном холсте и показать всю информацию сразу.

Именно для таких задач в Matplotlib существует механизм подграфиков. Он позволяет разбивать область отображения на несколько частей и размещать в каждой из них отдельный график.

В этом уроке мы научимся работать с функцией subplot(), сравнивать несколько показателей одновременно и грамотно организовывать пространство на холсте.

Что вы узнаете в рамках статьи

  • Зачем использовать несколько графиков на одном холсте.
  • Как работает функция subplot().
  • Как создавать сетки графиков.
  • Как размещать графики по строкам и столбцам.
  • Как сравнивать несколько показателей одновременно.
  • Как улучшать читаемость сложных визуализаций.
  • Как организовывать пространство на холсте.

Ключевые термины

  • Подграфик (subplot) — отдельная область внутри общего холста для отображения графика.
  • Холст (figure) — область, содержащая один или несколько графиков.
  • Сетка графиков — расположение нескольких подграфиков по строкам и столбцам.
  • Matplotlib Figure — объект, представляющий весь рисунок.
  • Matplotlib Axes — отдельный график внутри Figure.

Зачем нужны несколько графиков

Представим, что у нас есть данные о продажах и прибыли компании.

months = ["Янв", "Фев", "Мар", "Апр"]

sales = [12000, 15000, 17000, 21000]
profit = [3000, 4200, 5000, 6500]

Мы можем построить два отдельных графика. Но тогда пользователю придется переключаться между ними и самостоятельно сравнивать результаты. Гораздо удобнее разместить оба графика рядом.

Такой подход позволяет быстрее замечать закономерности и лучше понимать взаимосвязи между показателями. Именно поэтому в аналитических отчетах часто используются группы графиков.

Что такое subplot()

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

Для этого в Matplotlib используется функция subplot(). Она позволяет разбить холст на сетку из строк и столбцов, а затем разместить в каждой ячейке отдельный график.

Общий вид функции выглядит так:

plt.subplot(rows, columns, index)

Здесь:

  • rows — количество строк в сетке;
  • columns — количество столбцов;
  • index — номер ячейки, в которую будет помещен текущий график.

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

Первый график создается так:

plt.subplot(2, 1, 1)

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

Если после этого написать:

plt.subplot(2, 1, 2)

то Matplotlib переключится на вторую ячейку той же сетки, и следующий график будет построен уже под первым.

Удобно представлять себе subplot() как разметку страницы. Сначала вы говорите Matplotlib, на сколько частей нужно разделить холст, а затем указываете, в какую именно часть помещать очередной график. Благодаря этому можно создавать отчеты и дашборды, где сразу видно несколько показателей и их гораздо проще сравнивать между собой.

Первый пример с двумя графиками

Построим два графика друг под другом.

import matplotlib.pyplot as plt

months = ["Янв", "Фев", "Мар", "Апр"]

sales = [12000, 15000, 17000, 21000]
profit = [3000, 4200, 5000, 6500]

plt.subplot(2, 1, 1)
plt.plot(months, sales)
plt.title("Продажи")

plt.subplot(2, 1, 2)
plt.plot(months, profit)
plt.title("Прибыль")

plt.show()

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

Как работает нумерация

Новички часто путаются в третьем параметре функции subplot(). Важно понимать, что графики нумеруются слева направо и сверху вниз.

Сетка 2 на 2

Создадим четыре графика одновременно.

import matplotlib.pyplot as plt

months = ["Янв", "Фев", "Мар", "Апр"]

plt.subplot(2, 2, 1)
plt.plot(months, [12, 15, 17, 21])
plt.title("Продажи")

plt.subplot(2, 2, 2)
plt.plot(months, [3, 4, 5, 6])
plt.title("Прибыль")

plt.subplot(2, 2, 3)
plt.plot(months, [120, 150, 180, 220])
plt.title("Заказы")

plt.subplot(2, 2, 4)
plt.plot(months, [25, 28, 35, 42])
plt.title("Клиенты")

plt.show()

Теперь на одном холсте отображаются четыре различных показателя. Такой подход часто используется при создании аналитических отчетов и дашбордов.

Сравнение нескольких показателей

Главное преимущество подграфиков заключается в возможности сравнивать данные.

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

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

Организация пространства на холсте

Когда графиков становится много, появляется новая проблема:

  • Подграфики начинают накладываться друг на друга.
  • Подписи могут пересекаться.
  • Заголовки становятся плохо читаемыми.

Для решения этой проблемы существует функция plt.tight_layout(). Она автоматически распределяет свободное пространство между графиками.

Рассмотрим пример:

import matplotlib.pyplot as plt

months = ["Янв", "Фев", "Мар", "Апр"]

plt.subplot(2, 2, 1)
plt.plot(months, [12, 15, 17, 21])
plt.title("Продажи")

plt.subplot(2, 2, 2)
plt.plot(months, [3, 4, 5, 6])
plt.title("Прибыль")

plt.subplot(2, 2, 3)
plt.plot(months, [120, 150, 180, 220])
plt.title("Заказы")

plt.subplot(2, 2, 4)
plt.plot(months, [25, 28, 35, 42])
plt.title("Клиенты")

plt.tight_layout()

plt.show()

В большинстве случаев рекомендуется вызывать tight_layout() перед show().

Когда не стоит использовать много графиков

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

Если графиков слишком много, лучше разбить отчет на несколько частей. Практика показывает, что четыре-шесть графиков на одном холсте обычно воспринимаются значительно лучше, чем большая сетка из десятков маленьких визуализаций.

Использование разных типов графиков

На одном холсте можно размещать не только одинаковые графики.

Например:

plt.subplot(1, 2, 1)
plt.plot(months, sales)

plt.subplot(1, 2, 2)
plt.bar(months, sales)

В этом случае слева будет линейный график, а справа — столбчатая диаграмма. Такой подход позволяет рассматривать данные с разных точек зрения.

Наиболее частые ошибки

  • Неправильная нумерация subplot()
    Графики появляются не в тех местах, где ожидалось.
  • Слишком большое количество графиков на одном холсте
    Визуализация становится перегруженной.
  • Отсутствие заголовков у подграфиков
    Сложно понять назначение каждого графика.
  • Неиспользование tight_layout()
    Подписи и заголовки могут накладываться друг на друга.
  • Размещение несвязанных графиков рядом
    Усложняет восприятие данных.

Наиболее частые вопросы

  • Можно ли использовать разные типы графиков внутри одной сетки?
    Да, это довольно распространенная практика.
  • Обязательно ли использовать subplot()?
    Нет, но это самый простой способ разместить несколько графиков на одном холсте.
  • Сколько графиков лучше размещать одновременно?
    Обычно от двух до шести.
  • Можно ли делать сетки 3×3 или 4×4?
    Да, количество строк и столбцов не ограничено.
  • Зачем нужен tight_layout()?
    Он помогает избежать наложения элементов графиков друг на друга.

Итоги

В этом уроке вы познакомились с механизмом подграфиков в Matplotlib. Мы научились использовать функцию subplot(), создавать сетки из нескольких графиков и размещать различные визуализации на одном холсте.

Кроме того, вы узнали, как организовывать пространство между графиками с помощью tight_layout() и как использовать несколько визуализаций для сравнения различных показателей. Эти возможности часто применяются в аналитических отчетах, дашбордах и исследовательском анализе данных.

В следующем уроке мы познакомимся с объектной моделью Matplotlib и узнаем, что такое Figure и Axes.

На следующий урок