Файл для практики.
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.