На этом шаге мы рассмотрим примеры использования этого элемента.
Самые простые и наиболее часто используемые варианты компоновки графиков были рассмотрены, начиная с 20 шага. На этом шаге мы изучим инструмент GridSpec, позволяющий более тонко настроить компоновку.
Класс GridSpec позволяет задавать геометрию сетки и расположение на ней полей с графиками. Может показаться, что работа с GridSpec довольно неудобна и требует написания лишнего кода, но, если требуется расположить поля с графиками нетривиальным способом, то этот инструмент становится незаменимым. Перед тем как работать с GridSpec, импортируйте его:
import matplotlib.gridspec as gridspec
Для начала решим простую задачу отображения двух полей с графиками с использованием GridSpec:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec x = [1, 2, 3, 4, 5] y1 = [9, 4, 2, 4, 9] y2 = [1, 7, 6, 3, 5] fg = plt.figure(figsize=(7, 3), constrained_layout=True) gs = gridspec.GridSpec(ncols=2, nrows=1, figure=fg) fig_ax_1 = fg.add_subplot(gs[0, 0]) plt.plot(x, y1) fig_ax_2 = fg.add_subplot(gs[0, 1]) plt.plot(x, y2) gridspec.GridSpec(ncols=2, nrows=1, figure=fg) plt.show()
Результат работы приложения изображен на рисунке 1.
Рис.1. Два поля с графиками
В конструктор класса передаётся количество столбцов (2), строк (1) и фигура (fg), на которой все будет отображено.
Альтернативный вариант создания объекта GridSpec выглядит так:
gs = fg.add_gridspec(1, 2)
Здесь fg - это объект Figure, у которого есть метод add_gridspec(), позволяющий добавить на него сетку с заданными параметрами (в нашем случае одна строка и два столбца).
Для задания элементов сетки, на которых будет расположено поле с графиком, GridSpec позволяет использовать синтаксис подобный тому, что применяется для построения слайсов в Numpy. Добавим ещё один набор данных к уже существующему и построим графики в новой компоновке:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec x = [1, 2, 3, 4, 5] y1 = [9, 4, 2, 4, 9] y2 = [1, 7, 6, 3, 5] y3 = [-7, -4, 2, -4, -7] fg = plt.figure(figsize=(9, 4), constrained_layout=True) gs = fg.add_gridspec(2, 2) fig_ax_1 = fg.add_subplot(gs[0, :]) plt.plot(x, y2) fig_ax_2 = fg.add_subplot(gs[1, 0]) plt.plot(x, y1) fig_ax_3 = fg.add_subplot(gs[1, 1]) plt.plot(x, y3) plt.show()
Результат работы приложения изображен на рисунке 2.
Рис.2. Свободная компоновка (пример 1)
Конструкция [0, :] говорит о том, что первый график начинается с ячейки 0 и до конца текущей строки; [1, 0] - ячейка с номером 0 в 1-й строке и т.д.
Ниже представлен ещё один пример без данных (с пустыми полями), который иллюстрирует возможности GridSpec:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec fg = plt.figure(figsize=(9, 9), constrained_layout=True) gs = fg.add_gridspec(5, 5) fig_ax_1 = fg.add_subplot(gs[0, :3]) fig_ax_1.set_title('gs[0, :3]') fig_ax_2 = fg.add_subplot(gs[0, 3:]) fig_ax_2.set_title('gs[0, 3:]') fig_ax_3 = fg.add_subplot(gs[1:, 0]) fig_ax_3.set_title('gs[1:, 0]') fig_ax_4 = fg.add_subplot(gs[1:, 1]) fig_ax_4.set_title('gs[1:, 1]') fig_ax_5 = fg.add_subplot(gs[1, 2:]) fig_ax_5.set_title('gs[1, 2:]') fig_ax_6 = fg.add_subplot(gs[2:4, 2]) fig_ax_6.set_title('gs[2:4, 2]') fig_ax_7 = fg.add_subplot(gs[2:4, 3:]) fig_ax_7.set_title('gs[2:4, 3:]') fig_ax_8 = fg.add_subplot(gs[4, 3:]) fig_ax_8.set_title('gs[4, 3:]') plt.show()
Результат работы приложения изображен на рисунке 3.
Рис.3. Свободная компоновка (пример 2)
Можно заранее задать размеры областей и передать их в качестве параметров в виде массивов:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec fg = plt.figure(figsize=(5, 5), constrained_layout=True) widths = [1, 3] heights = [2, 0.7] gs = fg.add_gridspec(ncols=2, nrows=2, width_ratios=widths, height_ratios=heights) fig_ax_1 = fg.add_subplot(gs[0, 0]) fig_ax_1.set_title('w:1, h:2') fig_ax_2 = fg.add_subplot(gs[0, 1]) fig_ax_2.set_title('w:3, h:2') fig_ax_3 = fg.add_subplot(gs[1, 0]) fig_ax_3.set_title('w:1, h:0.7') fig_ax_4 = fg.add_subplot(gs[1, 1]) fig_ax_4.set_title('w:3, h:0.7') plt.show()
Результат работы приложения изображен на рисунке 4.
Рис.4. Свободная компоновка (пример 3)
Теперь вы можете создавать компоновки практически любой сложности.
Со следующего шага мы начнем рассматривать текстовые элементы графика.