Что такое легенда и зачем она нужна
Легенда в Matplotlib — это важный элемент визуализации данных, который позволяет читателю понять, какие линии, маркеры или области на графике соответствуют различным наборам данных или категориям. Она служит своего рода ключом к графику, обеспечивая контекст и ясность. Без легенды интерпретация графика может быть затруднена или даже невозможна, особенно если на нем представлено несколько наборов данных.
Основные элементы легенды: метки и маркеры
Легенда состоит из двух основных элементов:
- Метки (labels): Текстовые описания, которые объясняют, что представляет каждый элемент графика. Например, «Рекламная кампания A» или «Конверсия».
- Маркеры (markers): Визуальные представления, соответствующие элементам графика. Обычно это цветные линии, маркеры или заполненные области.
Вместе метки и маркеры образуют пары, которые позволяют сопоставить визуальные элементы графика с их значениями или категориями.
Простой пример создания графика с легендой
Рассмотрим простой пример создания графика с легендой, демонстрирующий динамику кликов по двум разным объявлениям:
import matplotlib.pyplot as plt
import numpy as np
from typing import List
def plot_clicks(ad_names: List[str], clicks: List[List[int]]) -> None:
"""Plots click data for different advertisements.
Args:
ad_names: A list of advertisement names.
clicks: A list of lists, where each inner list represents click data for an ad.
"""
x = np.arange(len(clicks[0]))
fig, ax = plt.subplots()
for i, ad_clicks in enumerate(clicks):
ax.plot(x, ad_clicks, label=ad_names[i])
ax.set_xlabel("День")
ax.set_ylabel("Количество кликов")
ax.set_title("Динамика кликов по объявлениям")
ax.legend()
plt.show()
ad_names = ["Объявление 1", "Объявление 2"]
clicks = [[10, 15, 13, 18, 20], [8, 12, 10, 14, 16]]
plot_clicks(ad_names, clicks)
В этом примере мы создаем график с двумя линиями, каждая из которых представляет динамику кликов по разным объявлениям. Функция ax.plot() строит график и присваивает каждой линии метку через аргумент label. Затем функция ax.legend() автоматически создает и отображает легенду на основе этих меток.
Добавление легенды к графику
Использование функции plt.legend()
Функция plt.legend() (или ax.legend(), если используется объектно-ориентированный интерфейс) — это основной инструмент для добавления легенды к графику в Matplotlib. Она автоматически обнаруживает элементы графика с назначенными метками (через аргумент label в функциях plot(), scatter() и т.д.) и создает легенду на их основе.
Указание меток для линий графика
Метки для элементов графика указываются при их создании, например:
plt.plot(x, y1, label="Линия 1")
plt.scatter(x, y2, label="Точки 2")
Если метка не указана, соответствующий элемент не будет отображаться в легенде.
Автоматическое и ручное добавление легенды
Matplotlib может добавлять легенду как автоматически, так и вручную.
- Автоматически: Если метки указаны при создании графиков,
plt.legend()автоматически создаст легенду на основе этих меток. - Вручную: Можно создать легенду вручную, передав в
plt.legend()список объектов графика и соответствующие метки. Это полезно, если нужно отобразить в легенде только определенные элементы или изменить их порядок.
Пример ручного добавления легенды:
import matplotlib.pyplot as plt
line1, = plt.plot([1, 2, 3], label="Линия 1")
line2, = plt.plot([3, 2, 1], label="Линия 2")
plt.legend([line1, line2], ["Первая линия", "Вторая линия"])
plt.show()
Настройка внешнего вида легенды
Изменение положения легенды: loc
Аргумент loc функции plt.legend() позволяет указать положение легенды на графике. Доступны различные предопределенные значения, такие как upper right, upper left, lower right, lower left, center, best (автоматический выбор оптимального положения) и другие. Также можно указать положение легенды в координатах осей графика, используя кортеж (x, y).
Пример:
plt.legend(loc="upper right")
Настройка шрифта и размера текста легенды
Параметры шрифта и размера текста легенды можно настроить с помощью аргумента fontsize (размер шрифта) и prop (свойства шрифта). prop принимает словарь со свойствами шрифта, такими как family, style и weight.
Пример:
plt.legend(fontsize="small", prop={'family': 'serif', 'style': 'italic'})
Изменение цвета фона и рамки легенды
Для изменения цвета фона легенды используется аргумент facecolor, а для изменения цвета рамки — edgecolor. Также можно настроить прозрачность фона с помощью аргумента alpha.
Пример:
plt.legend(facecolor="lightgray", edgecolor="black", alpha=0.5)
Управление количеством столбцов в легенде: ncol
Аргумент ncol позволяет разбить легенду на несколько столбцов. Это полезно, если в легенде много элементов и она занимает слишком много места по вертикали.
Пример:
plt.legend(ncol=2)
Продвинутые техники работы с легендами
Добавление легенды для отдельных элементов графика
Иногда требуется добавить легенду только для определенных элементов графика. Это можно сделать, передав в plt.legend() список объектов графика, для которых нужно создать легенду, и соответствующие метки.
Создание пользовательских маркеров в легенде
Matplotlib позволяет создавать пользовательские маркеры в легенде, используя класс matplotlib.lines.Line2D. Это полезно, если нужно отобразить в легенде маркеры, отличные от тех, которые используются на графике.
Использование LaTeX в метках легенды
В метках легенды можно использовать LaTeX для форматирования текста, добавления математических символов и формул. Для этого нужно заключить текст LaTeX в знаки доллара ($).
Пример:
plt.plot(x, y, label="$\alpha > \beta$")
plt.legend()
Решение распространенных проблем с легендами
Легенда перекрывает график: как это исправить
Если легенда перекрывает важные части графика, можно изменить ее положение с помощью аргумента loc или переместить ее вручную, перетащив мышкой (если интерактивный режим Matplotlib включен).
Не отображаются метки в легенде: причины и решения
Если метки не отображаются в легенде, убедитесь, что они были указаны при создании элементов графика (например, через аргумент label в plt.plot()). Также проверьте, что функция plt.legend() вызывается после создания всех элементов графика.
Удаление легенды
Для удаления легенды с графика можно использовать функцию plt.legend().remove() или ax.get_legend().remove().