Matplotlib: Создание подграфиков с общей меткой оси Y — Руководство и примеры кода

Matplotlib – мощная библиотека Python для визуализации данных. Одна из частых задач – создание нескольких графиков (подграфиков) в одной фигуре. При этом возникает необходимость объединить метки оси Y, чтобы сделать визуализацию более понятной и профессиональной. В этой статье мы рассмотрим различные способы реализации общей метки оси Y для подграфиков в Matplotlib, от базовых до продвинутых техник.

Основы работы с подграфиками в Matplotlib

Создание сетки подграфиков с помощью plt.subplots()

Функция plt.subplots() – основной инструмент для создания сетки подграфиков. Она возвращает объект Figure и массив объектов Axes, представляющих каждый подграфик.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 6))
# axes - это numpy array, содержащий объекты Axes

Базовое размещение и настройка отдельных подграфиков

После создания сетки подграфиков можно обращаться к каждому из них по индексу и настраивать его индивидуально.

axes[0, 0].plot([1, 2, 3], [4, 5, 6]) # Верхний левый подграфик
axes[0, 1].scatter([1, 2, 3], [7, 8, 9]) # Верхний правый подграфик
axes[1, 0].bar([1, 2, 3], [10, 11, 12]) # Нижний левый подграфик
axes[1, 1].hist([13, 14, 15]) # Нижний правый подграфик

plt.show()

Реализация общей метки оси Y

Метод fig.text() для добавления общей метки

Один из способов добавления общей метки оси Y – использование метода fig.text(). Он позволяет разместить текст в произвольной точке фигуры, независимо от подграфиков.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=1, sharey=True)
axes[0].plot([1, 2, 3], [4, 5, 6])
axes[1].plot([1, 2, 3], [7, 8, 9])

fig.text(0.04, 0.5, 'Общая метка оси Y', va='center', rotation='vertical')

plt.show()

sharey=True задает общую ось Y для подграфиков.

Использование plt.ylabel() с отключением меток на отдельных графиках

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

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=1, sharey=True)
axes[0].plot([1, 2, 3], [4, 5, 6])
axes[1].plot([1, 2, 3], [7, 8, 9])

axes[0].set_ylabel('Общая метка оси Y')
for ax in axes[1:]:  # Пропускаем первый подграфик
    ax.set_ylabel('') # Убираем подписи для других графиков
plt.show()

Продвинутые техники и настройка

Управление общим масштабом оси Y

Когда графики имеют разные диапазоны значений по оси Y, полезно настроить общий масштаб оси, чтобы все данные были видны. Это можно сделать с помощью sharey=True и настройки пределов осей.

Стилизация и форматирование общей метки

Общую метку можно стилизовать, изменяя шрифт, цвет, размер и другие параметры текста, используя аргументы метода fig.text() или свойства объекта текста, возвращаемого методом plt.ylabel(). Например, fontsize, color, fontweight.

Реклама

Примеры кода

Пример 1: Простая сетка с общей меткой оси Y

import matplotlib.pyplot as plt
import numpy as np

# Создаем данные
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# Создаем подграфики
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, sharey=True)

# Строим графики
ax1.plot(x, y1)
ax2.plot(x, y2)

# Добавляем общую метку оси Y
fig.supylabel('Значение', fontsize=12)

# Добавляем подписи к осям X
ax2.set_xlabel('X', fontsize=10)

# Настраиваем отображение
plt.tight_layout()
plt.show()

Пример 2: Сложный макет с настройкой общего масштаба

import matplotlib.pyplot as plt
import numpy as np

# Создаем данные
x = np.linspace(0, 10, 100)
y1 = np.sin(x) * 100
y2 = np.cos(x)

# Создаем подграфики
fig, axes = plt.subplots(2, 2, figsize=(10, 8), sharex='col')

# Заполняем графики данными
axes[0, 0].plot(x, y1, 'r') # первый график, красный цвет
axes[0, 1].plot(x, y2, 'g') # второй график, зеленый цвет
axes[1, 0].plot(x, -y1, 'b') # третий график, синий цвет
axes[1, 1].plot(x, -y2, 'k') # четвертый график, черный цвет

# Настраиваем общую ось Y только для первого столбца
axes[0, 0].set_ylabel('Y1', fontsize=12)
axes[1, 0].set_ylabel('Y1', fontsize=12)

# Используем fig.text для создания общей метки оси Y для второго столбца
fig.text(0.75, 0.5, 'Y2', va='center', rotation='vertical', fontsize=12)

# Добавляем подписи к осям X (только для нижнего ряда)
axes[1, 0].set_xlabel('X', fontsize=10)
axes[1, 1].set_xlabel('X', fontsize=10)

# Автоматическая настройка размещения подграфиков
plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.show()

Альтернативные подходы и лучшие практики

Когда не стоит использовать общую метку оси Y

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

Другие библиотеки для визуализации с похожим функционалом

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

Заключение

Создание подграфиков с общей меткой оси Y в Matplotlib – полезный прием для улучшения читаемости и профессионального вида визуализаций. В статье мы рассмотрели основные методы и примеры кода, позволяющие реализовать эту задачу. Правильный выбор метода зависит от конкретных требований к макету и стилю графика. Использование fig.text() предоставляет большую гибкость, а plt.ylabel() с отключением меток – более простой способ для базовых случаев.


Добавить комментарий