Один общий легенд для множества subplots в Matplotlib

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для создания общей легенды для нескольких подграфиков следует использовать метод fig.legend(), предварительно получив элементы графика и их наименования. Вот простой пример для двух подграфиков (ax1, ax2) с применением библиотеки matplotlib:

Python
Скопировать код
import matplotlib.pyplot as plt

# Создаём подграфики и отображаем данные с подписями
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.plot([1, 2, 3], label="Линия 1")
ax2.plot([3, 2, 1], label="Линия 2")

# Получаем элементы легенды и располагаем общую легенду справа от графиков
handles, labels = zip(*(ax.get_legend_handles_labels() for ax in [ax1, ax2]))
fig.legend(handles, labels, loc='center right')

plt.show()

Приведенный код объединит элементы легенд подграфиков ax1 и ax2 и расположит их справа.

Кинга Идем в IT: пошаговый план для смены профессии

Пошаговое руководство по созданию общей легенды

Сбор элементов легенды

Первый шаг в создании общей легенды – это сбор всех значков и подписей с подграфиков. Можно использовать цикл for или генератор списка. Предположим, что у нас есть n подграфиков:

Python
Скопировать код
handles, labels = [], []
for ax in fig.get_axes():
    h, l = ax.get_legend_handles_labels()
    handles.extend(h)
    labels.extend(l)

Определение положения легенды

В контексте pyplot подойдет следующий способ:

Python
Скопировать код
handles, labels = plt.gca().get_legend_handles_labels()

Но fig.legend() предоставляет больше возможностей для контроля. Используйте параметры bbox_to_anchor и bbox_transform для точного размещения легенды вне графиков:

Python
Скопировать код
fig.legend(handles, labels, loc='upper left', bbox_to_anchor=(1, 1), bbox_transform=plt.gcf().transFigure)

Увеличивайте размер изображения для исключения наложения легенды на графики.

Когда используются объединенные оси

Если вы объединяете оси с помощью twinx(), вам нужно будет объединить элементы обеих осей:

Python
Скопировать код
ax2 = ax1.twinx()
handles1, labels1 = ax1.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
handles, labels = handles1 + handles2, labels1 + labels2

Удаление отдельных легенд

После добавления общей легенды следует скрыть отдельные легенды подграфиков:

Python
Скопировать код
for ax in fig.get_axes():
    ax.legend().set_visible(False)

Обеспечение визуального единообразия

Для сохранения общего стиля всех линий на различных подграфиках используйте одинаковые параметры color и linestyle или настройте axes.prop_cycle в plt.rcParams.

Правильное время для добавления легенды

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

Визуализация

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

Markdown
Скопировать код
Подграфики — это кадры фильма
|-- 🍿 Кадр А
|-- 🍿 Кадр Б
|-- 🍿 Кадр В

Легенда объединяет их в цельную историю:

Markdown
Скопировать код
Единая легенда (Рассказчик)
|-- 🔵 Синий: "Линия 1" в кадрах А, Б
|-- 🔺 Красный: "Линия 2" в кадрах А, В
|-- ⬛ Черный: "И так далее..." в кадре Б

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

Создание подграфиков для лучшего повествования

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

Заключительные штрихи: заголовок

Украсьте вашу визуализацию, добавив общий заголовок через fig.suptitle и правильно расположив легенду с использованием параметров bbox_to_anchor и loc.

Полезные материалы

  1. matplotlib.legend — Материалы по Matplotlib 3.8.2 — Подробная информация о размещении и настройке легенды.
  2. Создание подграфиков с помощью plt.subplots — Материалы по Matplotlib 3.8.2 — Обширное руководство по работе с подграфиками.
  3. Примеры легенд — Материалы по Matplotlib 3.8.2 — Примеры оформления легенды.
  4. Настройка легенд в графиках | Руководство по науке о данных в Python — Советы по расположению и выравниванию легенды.
  5. Руководство по Matplotlib на Python – Real Python — Глубокое погружение в создание графиков.
  6. Размеры изображений для подграфиков — Материалы по Matplotlib 3.8.2 — Работа с размерами фигур.