Создание пользовательской сетки осей в Matplotlib

PythonPythonBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся создавать пользовательскую сетку осей с использованием Matplotlib с помощью модуля mpl_toolkits.axes_grid1. Мы создадим два примера: один с фиксированными размерами осей и отступами, а другой с масштабируемыми размерами осей и фиксированными отступами.

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

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

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

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

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

Начнем с импорта необходимых библиотек: matplotlib.pyplot для визуализации и mpl_toolkits.axes_grid1 для создания пользовательской сетки осей.

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import Divider, Size

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

Мы определим вспомогательную функцию label_axes(), которая будет использоваться для размещения метки в центре оси и удаления делений на оси.

def label_axes(ax, text):
    """Place a label at the center of an Axes, and remove the axis ticks."""
    ax.text(.5,.5, text, transform=ax.transAxes,
            horizontalalignment="center", verticalalignment="center")
    ax.tick_params(bottom=False, labelbottom=False,
                   left=False, labelleft=False)

Создание пользовательской сетки осей с фиксированными размерами и отступами

Мы создадим пользовательскую сетку осей с фиксированными размерами и отступами. Мы будем использовать класс Divider, чтобы разделить прямоугольник осей на сетку с размерами, заданными horiz * vert. Затем мы добавим четыре оси на рисунок с использованием метода add_axes() и укажем позиции каждой оси с использованием метода new_locator() класса Divider.

## Sizes are in inches.
horiz = [Size.Fixed(1.), Size.Fixed(.5), Size.Fixed(1.5), Size.Fixed(.5)]
vert = [Size.Fixed(1.5), Size.Fixed(.5), Size.Fixed(1.)]

rect = (0.1, 0.1, 0.8, 0.8)
fig = plt.figure(figsize=(6, 6))
fig.suptitle("Fixed axes sizes, fixed paddings")

div = Divider(fig, rect, horiz, vert, aspect=False)

## The rect parameter will actually be ignored and overridden by axes_locator.
ax1 = fig.add_axes(rect, axes_locator=div.new_locator(nx=0, ny=0))
label_axes(ax1, "nx=0, ny=0")
ax2 = fig.add_axes(rect, axes_locator=div.new_locator(nx=0, ny=2))
label_axes(ax2, "nx=0, ny=2")
ax3 = fig.add_axes(rect, axes_locator=div.new_locator(nx=2, ny=2))
label_axes(ax3, "nx=2, ny=2")
ax4 = fig.add_axes(rect, axes_locator=div.new_locator(nx=2, nx1=4, ny=0))
label_axes(ax4, "nx=2, nx1=4, ny=0")

plt.show()

Создание пользовательской сетки осей с масштабируемыми размерами и фиксированными отступами

Мы создадим еще одну пользовательскую сетку осей с масштабируемыми размерами и фиксированными отступами. Мы будем использовать параметр Size.Scaled(), чтобы указать размеры осей, которые масштабируются в зависимости от размера рисунка. Остальные шаги аналогичны предыдущему примеру.

## Sizes are in inches.
horiz = [Size.Scaled(1.5), Size.Fixed(.5), Size.Scaled(1.), Size.Scaled(.5)]
vert = [Size.Scaled(1.), Size.Fixed(.5), Size.Scaled(1.5)]

rect = (0.1, 0.1, 0.8, 0.8)
fig = plt.figure(figsize=(6, 6))
fig.suptitle("Scalable axes sizes, fixed paddings")

div = Divider(fig, rect, horiz, vert, aspect=False)

## The rect parameter will actually be ignored and overridden by axes_locator.
ax1 = fig.add_axes(rect, axes_locator=div.new_locator(nx=0, ny=0))
label_axes(ax1, "nx=0, ny=0")
ax2 = fig.add_axes(rect, axes_locator=div.new_locator(nx=0, ny=2))
label_axes(ax2, "nx=0, ny=2")
ax3 = fig.add_axes(rect, axes_locator=div.new_locator(nx=2, ny=2))
label_axes(ax3, "nx=2, ny=2")
ax4 = fig.add_axes(rect, axes_locator=div.new_locator(nx=2, nx1=4, ny=0))
label_axes(ax4, "nx=2, nx1=4, ny=0")

plt.show()

Резюме

В этом практическом занятии мы узнали, как создавать пользовательскую сетку осей с использованием Matplotlib с помощью модуля mpl_toolkits.axes_grid1. Мы создали два примера: один с фиксированными размерами осей и отступами, а другой с масштабируемыми размерами осей и фиксированными отступами. Мы использовали класс Divider, чтобы разделить прямоугольник осей на сетку с размерами, заданными horiz * vert, и добавили оси на рисунок с использованием метода add_axes() и метода new_locator() класса Divider.