Программное управление настройкой подграфика

Beginner

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

Введение

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

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

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

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

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

Импортируем необходимые библиотеки

Для создания графика и управления параметрами подграфика нам понадобятся matplotlib.pyplot и matplotlib.transforms.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms

Создаем график

Создадим простой линейный график с некоторыми длинными метками по оси y.

fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_yticks([2, 5, 7], labels=['really, really, really', 'long', 'labels'])

Определяем функцию обратного вызова для рисования

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

def on_draw(event):
    bboxes = []
    for label in ax.get_yticklabels():
        ## Граница прямоугольника в пикселях
        bbox_px = label.get_window_extent()
        ## Преобразуем в относительные координаты фигуры. Это обратное
        ## преобразование transFigure.
        bbox_fig = bbox_px.transformed(fig.transFigure.inverted())
        bboxes.append(bbox_fig)
    ## Граница прямоугольника, охватывающая все ограничивающие прямоугольники,
    ## снова в относительных координатах фигуры
    bbox = mtransforms.Bbox.union(bboxes)
    if fig.subplotpars.left < bbox.width:
        ## Сдвиньте левую границу подграфика даль вправо
        fig.subplots_adjust(left=1.1*bbox.width)  ## добавьте небольшой отступ
        fig.canvas.draw()

Подключаем событие рисования к функции обратного вызова

Нам нужно подключить событие draw_event к нашей функции on_draw.

fig.canvas.mpl_connect('draw_event', on_draw)

Показываем график

Наконец, мы покажем график.

plt.show()

Резюме

В этом практическом занятии мы узнали, как программно настраивать параметры подграфика в зависимости от размера меток. Мы использовали модуль matplotlib.transforms для вычисления ограничивающих прямоугольников меток и событие draw_event для вызова нашей функции on_draw.