Добавление легенды на график в Matplotlib: полное руководство

Что такое легенда и зачем она нужна?

Легенда в Matplotlib — это элемент графика, который сопоставляет визуальные представления (цвета, маркеры, линии) с соответствующими подписями данных. Она помогает зрителям понимать, какие элементы графика соответствуют каким данным, делая ваши визуализации более информативными и доступными. Без легенды, особенно на сложных графиках, интерпретация данных становится затруднительной.

Основы создания графиков в Matplotlib

Прежде чем углубляться в легенды, убедимся, что у нас есть базовое понимание создания графиков в Matplotlib. Обычно это включает импорт библиотеки, создание данных, построение графика и, наконец, отображение графика. Давайте рассмотрим простой пример:

import matplotlib.pyplot as plt
import numpy as np
from typing import List, Tuple


def create_sample_plot(x: List[float], y1: List[float], y2: List[float], label1: str, label2: str) -> None:
    """Creates a sample plot with two lines and a legend.

    Args:
        x: List of x-coordinates.
        y1: List of y-coordinates for the first line.
        y2: List of y-coordinates for the second line.
        label1: Label for the first line in the legend.
        label2: Label for the second line in the legend.
    """
    plt.plot(x, y1, label=label1)
    plt.plot(x, y2, label=label2)
    plt.xlabel("X-Axis")
    plt.ylabel("Y-Axis")
    plt.title("Sample Plot")
    plt.legend()
    plt.show()


if __name__ == "__main__":
    x_data = np.linspace(0, 10, 100) # Генерируем 100 точек от 0 до 10
    y1_data = np.sin(x_data)
    y2_data = np.cos(x_data)

    create_sample_plot(x_data.tolist(), y1_data.tolist(), y2_data.tolist(), "Sin(x)", "Cos(x)")

Базовое добавление легенды

Использование параметра label при построении графиков

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

Вызов функции plt.legend() для отображения легенды

После того, как вы задали подписи для графиков, вызовите функцию plt.legend(), чтобы отобразить легенду на графике. Matplotlib автоматически соберет подписи и создаст легенду.

Автоматическое определение подписей легенды

Если вы используете параметр label при построении графиков, plt.legend() автоматически обнаружит эти подписи и отобразит их в легенде. Если же подписи не заданы, легенда не будет отображаться, или будет пустой.

Настройка расположения легенды

Параметр loc: указание положения легенды (best, upper right, lower left и т.д.)

Параметр loc в функции plt.legend() позволяет указать, где должна быть расположена легенда. Доступны различные предопределенные значения, такие как best (автоматически выбирает оптимальное положение), upper right, lower left, center и другие. Пример:

plt.legend(loc='upper left')

Использование координат для точного позиционирования легенды

Для более точного позиционирования можно использовать координаты. В этом случае loc устанавливается в 'upper left', 'lower left', 'upper right' или 'lower right', а затем используются параметры bbox_to_anchor, чтобы сместить легенду относительно указанного угла. Например, bbox_to_anchor=(1.05, 1) поместит легенду немного правее и выше области графика.

Размещение легенды вне области графика

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

plt.legend(loc='upper left', bbox_to_anchor=(1.05, 1))
plt.tight_layout() # adjust plot parameters for a tight layout

Настройка внешнего вида легенды

Изменение шрифта и размера текста в легенде

Внешний вид текста в легенде можно настроить с помощью параметров fontsize и fontweight. fontsize принимает числовое значение или строковые значения, такие как small, medium, large. fontweight позволяет сделать текст жирным (bold).

Настройка цвета фона и рамки легенды

Цвет фона легенды можно изменить с помощью параметра facecolor, а цвет рамки — с помощью параметра edgecolor. Также можно настроить толщину рамки с помощью параметра frameon (логическое значение, определяющее, отображать ли рамку) и framealpha (прозрачность рамки).

Изменение прозрачности легенды (параметр alpha)

Параметр alpha управляет прозрачностью легенды. Значение 1 означает полную непрозрачность, а 0 — полную прозрачность.

Реклама

Управление количеством столбцов в легенде (параметр ncol)

Если в легенде много элементов, можно разделить их на несколько столбцов с помощью параметра ncol. Это может улучшить читаемость легенды.

Добавление тени к легенде (параметр shadow)

Параметр shadow (логическое значение) добавляет тень к легенде, что может улучшить ее визуальное выделение.

Управление элементами легенды

Изменение маркеров и линий в легенде

Matplotlib автоматически генерирует маркеры и линии в легенде, соответствующие элементам графика. Однако, можно вручную управлять этими элементами, используя handles и labels (см. ниже в продвинутых техниках).

Исключение определенных элементов из легенды

Иногда нужно исключить определенные элементы из легенды. Это можно сделать, получив handles и labels с графика и отфильтровав их перед передачей в plt.legend(). Или же можно просто не указывать label для тех графиков, которые не должны отображаться в легенде.

Добавление пользовательских элементов в легенду

Можно добавлять пользовательские элементы в легенду, создавая объекты Line2D или Patch и передавая их в plt.legend() вместе с соответствующими подписями.

Легенды для нескольких графиков в одной области

Создание нескольких графиков с разными подписями

При создании нескольких графиков в одной области (например, с помощью plt.subplot()), каждый график может иметь свою легенду. Главное — правильно задать подписи для каждого графика.

Управление легендами для каждого графика отдельно

Можно управлять легендами для каждого графика отдельно, вызывая plt.legend() в каждой подобласти (subplot). Это позволяет настраивать расположение и внешний вид легенды для каждого графика индивидуально.

Продвинутые техники работы с легендами

Использование handles и labels для более гибкого управления легендой

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

import matplotlib.pyplot as plt

# Создаем данные для графика
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]

# Строим графики с метками
line1, = plt.plot(x, y1, label='Линия 1')
line2, = plt.plot(x, y2, label='Линия 2')

# Получаем handles и labels
handles, labels = plt.gca().get_legend_handles_labels()

# Изменяем порядок элементов легенды (Линия 2 перед Линией 1)
plt.legend(handles=[line2, line1], labels=[labels[1], labels[0]])

plt.show()

Создание пользовательских функций для генерации легенд

Для сложных графиков или для повторного использования настроек легенды можно создать пользовательские функции, которые генерируют легенду с заданными параметрами.

Решение распространенных проблем с легендами

Перекрытие легендой элементов графика

Это распространенная проблема. Решения: изменить положение легенды с помощью loc или bbox_to_anchor, использовать plt.tight_layout(), уменьшить размер шрифта в легенде, переместить легенду за пределы графика.

Неправильное отображение символов в легенде

Проблема с кодировкой. Убедитесь, что ваш скрипт сохранен в кодировке UTF-8 и что в подписях используются корректные символы.

Отсутствие легенды при наличии подписей

Убедитесь, что вы вызвали функцию plt.legend(). Также проверьте, что подписи (label) заданы для всех элементов графика, которые должны отображаться в легенде. Проверьте, что тип данных соответствует ожидаемому (например, строка).

Заключение

Краткое повторение основных моментов

Легенда — важный элемент визуализации данных в Matplotlib. Она позволяет сопоставить визуальные элементы графика с соответствующими подписями. Базовое добавление легенды сводится к использованию параметра label при построении графиков и вызову функции plt.legend(). Расположение, внешний вид и элементы легенды можно гибко настраивать. Продвинутые техники позволяют создавать пользовательские легенды и решать распространенные проблемы, такие как перекрытие элементов графика.

Дополнительные ресурсы и ссылки


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