Matplotlib — это мощная библиотека Python для создания визуализаций. Однако при работе с несколькими подграфиками управление легендами может стать сложной задачей. В этой статье представлены эффективные методы создания единой, объединенной легенды для всех ваших подграфиков.
Содержание
- Понимание подграфиков в Matplotlib
- Метод 1: Использование
fig.legend()
- Метод 2: Настройка расположения и внешнего вида легенды
- Метод 3: Обработка нескольких линий на подграфике
- Заключение
- Часто задаваемые вопросы
Понимание подграфиков в 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
, размер шрифта или размер рисунка.