Data Visualization

Легенды Matplotlib: создание единой легенды для всех подграфиков

Spread the love

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

Содержание

Понимание подграфиков в Matplotlib

Подграфики располагают несколько графиков на одном рисунке. В Matplotlib вы создаете их с помощью matplotlib.pyplot.subplots(), который возвращает объект рисунка и массив объектов осей (по одному на каждый подграфик).

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)  # Сетка 2x2 подграфиков

# Построение данных на каждом подграфике
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Линия 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Линия 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Линия 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Линия 2')

plt.show()

Это создает сетку 2×2, каждая ячейка которой имеет свою легенду. Мы объединим их в одну легенду.

Метод 1: Использование fig.legend()

Простейший подход использует метод legend() объекта рисунка. Это требует сбора всех дескрипторов и меток легенды.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)

lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Линия 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Линия 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Линия 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Линия 2')

# Сбор уникальных дескрипторов и меток
handles = [lines1, lines2] 
labels = [h.get_label() for h in handles]

fig.legend(handles, labels, loc='upper right')

plt.show()

Примечание: Мы используем только уникальные дескрипторы, чтобы избежать дубликатов в легенде. loc указывает положение легенды.

Метод 2: Настройка расположения и внешнего вида легенды

Вы можете настроить расположение, границу, размер шрифта и многое другое для легенды.

import matplotlib.pyplot as plt

# ... (код построения графика из Метода 1) ...

fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)

plt.show()

Здесь мы разместили легенду внизу по центру, скорректировали вертикальное положение с помощью bbox_to_anchor, использовали два столбца (ncol=2), добавили границу (frameon=True) и увеличили размер шрифта.

Метод 3: Обработка нескольких линий на подграфике

Для нескольких линий в пределах одного подграфика соберите все соответствующие дескрипторы и метки.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Линия 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Линия 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Линия 3')

fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()

Заключение

Создание единой легенды для всех подграфиков улучшает ясность и читаемость ваших визуализаций Matplotlib. Представленные выше методы, использующие fig.legend() и правильное управление дескрипторами/метками, обеспечивают контроль над расположением и внешним видом легенды.

Часто задаваемые вопросы

  • В: Что делать, если у меня разные стили линий? О: Легенда автоматически отразит эти различия.
  • В: Можно ли использовать разные цвета для одной и той же метки? О: Да, но легенда будет показывать только один цвет на метку. Используйте разные метки для различия.
  • В: Моя легенда перекрывает графики. О: Настройте bbox_to_anchor, loc, размер шрифта или размер рисунка.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *