Matplotlib вложенные GridSpecs

Beginner

This tutorial is from open-source community. Access the source code

Введение

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

Советы по работе с ВМ

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

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

Сначала нам нужно импортировать необходимые библиотеки. Мы будем использовать matplotlib.pyplot для создания графиков и numpy для генерации некоторых данных для построения.

import matplotlib.pyplot as plt
import numpy as np

Создание данных

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

def squiggle_xy(a, b, c, d):
    i = np.arange(0.0, 2*np.pi, 0.05)
    return np.sin(i*a)*np.cos(i*b), np.sin(i*c)*np.cos(i*d)

Создание фигуры и внешней сетки

Далее мы создадим фигуру и внешнюю сетку с использованием функции add_gridspec. Мы создадим 4x4 сетку без расстояния между подграфиками.

fig = plt.figure(figsize=(8, 8))
outer_grid = fig.add_gridspec(4, 4, wspace=0, hspace=0)

Создание внутренних сеток и подграфиков

В этом шаге мы создадим внутренние сетки и подграфики с использованием вложенных .GridSpec. Мы пройдемся по каждой ячейке в внешней сетке и создадим для каждой ячейки 3x3 сетку.

for a in range(4):
    for b in range(4):
        ## gridspec внутри gridspec
        inner_grid = outer_grid[a, b].subgridspec(3, 3, wspace=0, hspace=0)
        axs = inner_grid.subplots()  ## Создаем все подграфики для внутренней сетки.
        for (c, d), ax in np.ndenumerate(axs):
            ax.plot(*squiggle_xy(a + 1, b + 1, c + 1, d + 1))
            ax.set(xticks=[], yticks=[])

Показать только внешние контуры

В этом шаге мы удалим контуры для внутренних подграфиков и покажем только внешние контуры. Это сделает график выглядеть чище.

for ax in fig.get_axes():
    ss = ax.get_subplotspec()
    ax.spines.top.set_visible(ss.is_first_row())
    ax.spines.bottom.set_visible(ss.is_last_row())
    ax.spines.left.set_visible(ss.is_first_col())
    ax.spines.right.set_visible(ss.is_last_col())

Показать график

Наконец, мы покажем график с использованием функции show().

plt.show()

Резюме

В этом практическом занятии вы узнали, как использовать вложенные .GridSpec в Matplotlib для создания сетки подграфиков различного размера. Мы также узнали, как генерировать данные с использованием numpy и как настраивать контуры подграфиков. С этими знаниями вы можете создавать сложные макеты графиков с точным контролем над их размером и расстоянием между ними.