Вращение текста в Matplotlib

Beginner

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

Введение

В этом практическом занятии вы научитесь вращать текст в Matplotlib с использованием параметра rotation_mode. Параметр rotation_mode определяет порядок вращения и выравнивания текста. Доступны два режима: default и anchor.

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

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

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

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

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

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

import matplotlib.pyplot as plt

Определяем функцию test_rotation_mode

Мы создадим функцию под названием test_rotation_mode, которая будет создавать подграфики для тестирования различных режимов вращения. Она принимает два параметра: fig и mode.

def test_rotation_mode(fig, mode):

Определяем списки горизонтального и вертикального выравнивания

Далее мы определим списки горизонтального и вертикального выравнивания, которые будут использоваться для создания подграфиков. Для каждого списка мы создадим три элемента: "left" (слева), "center" (по центру) и "right" (справа) для горизонтального выравнивания, а для вертикального выравнивания: "top" (сверху), "center" (по центру), "baseline" (по базовой линии) и "bottom" (снизу).

ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]

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

Теперь мы создадим подграфики с использованием функции subplots. Мы создадим сетку подграфиков с одинаковым соотношением сторон и удалим деления по осям x и y. Также добавим вертикальную и горизонтальную линию в центре каждого подграфика, чтобы помочь визуализировать выравнивание.

axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                   subplot_kw=dict(aspect=1),
                   gridspec_kw=dict(hspace=0, wspace=0))

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        ax.set(xticks=[], yticks=[])
        ax.axvline(0.5, color="skyblue", zorder=0)
        ax.axhline(0.5, color="skyblue", zorder=0)
        ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)

Добавляем текст в подграфики

Мы добавим текст в каждый подграфик с использованием функции text. Мы будем использовать параметры rotation (поворот), horizontalalignment (горизонтальное выравнивание), verticalalignment (вертикальное выравнивание) и rotation_mode (режим вращения) для вращения и выравнивания текста. Также мы будем использовать параметр bbox для выделения ограничивающего прямоугольника текста.

kw = (
    {} if mode == "default" else
    {"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)

texts = {}

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        tx = ax.text(0.5, 0.5, "Tpg",
                     size="x-large", rotation=40,
                     horizontalalignment=ha, verticalalignment=va,
                     rotation_mode=mode, **kw)
        texts[ax] = tx

Выделяем ограничивающий прямоугольник текста

Если rotation_mode установлен в 'default', мы выделим ограничивающий прямоугольник текста с использованием прямоугольника. Мы будем использовать функцию get_window_extent, чтобы получить ограничивающий прямоугольник и преобразовать его в координаты данных с использованием атрибута transData.

if mode == "default":
    fig.canvas.draw()
    for ax, text in texts.items():
        bb = text.get_window_extent().transformed(ax.transData.inverted())
        rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
                             facecolor="C1", alpha=0.3, zorder=2)
        ax.add_patch(rect)

Создаем подфигуры и вызываем функцию test_rotation_mode

Мы создадим две подфигуры и вызовем функцию test_rotation_mode с параметрами fig и mode.

fig = plt.figure(figsize=(8, 5))
subfigs = fig.subfigures(1, 2)
test_rotation_mode(subfigs[0], "default")
test_rotation_mode(subfigs[1], "anchor")
plt.show()

Резюме

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