Добавление меток второй оси в легенду с twinx() в Matplotlib

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

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

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

Для объединения легенд графиков основной и вторичной оси, созданных с использованием twinx() в Matplotlib, их нужно собрать воедино. Следуйте этим шагам:

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

# Допустим, у нас есть набор данных
x, y1, y2 = range(10), [i**0.8 for i in x], [i**2 for i in x]

fig, ax_primary = plt.subplots()

# Рисуем на основной оси, зеленым цветом
ax_primary.plot(x, y1, 'g-', label='Y1')

ax_secondary = ax_primary.twinx()

# Для вторичной оси выбран синий цвет
ax_secondary.plot(x, y2, 'b-', label='Y2')

# Собираем информацию для легенд с обеих осей
handles, labels = [], []
for ax in (ax_primary, ax_secondary):
    h, l = ax.get_legend_handles_labels()
    handles.extend(h)
    labels.extend(l)

# Отображаем объединенную легенду
ax_primary.legend(handles, labels)

plt.show()  # Приглашаем полюбоваться результатом!

Теперь легенда включает информацию об основной и вторичной оси.

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

Улучшаем вашу легенду

Поработаем над преобразованием обычного списка в образец искусства.

Управление расположением легенды

Размещали бы вы мебель в своем доме в одном и том же месте? Нет, почему и с легендой должно быть иначе. Можете выбрать любое место:

Python
Скопировать код
ax_primary.legend(handles, labels, loc='upper left')

Выберите подходящее положение с помощью ключа loc или задайте координаты прямо, используя кортеж (x, y).

Обогащение легенды

Станьте стилистом в телешоу для легенд, играя с цветами и шрифтами:

Python
Скопировать код
ax_primary.legend(handles, labels, frameon=False, title='Легенда', title_fontsize='large', fontsize='small', shadow=True)

Прокачайте ваши легенды, добавляя изысканность с помощью параметров frameon, title и подбирая размеры шрифтов fontsize и title_fontsize.

Вводим ошибки

Представьте ошибки профессионально и включаете их в вашу легенду, чтобы подчеркнуть достоверность данных:

Python
Скопировать код
# Идеальных данных не существует, как и не существует идеала
ax_primary.errorbar(x, y1, yerr=y1_error, fmt='g-', label='Y1 с ошибкой')

Такой подход демонстрирует вашу точность и аккуратность представления информации.

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

Приготовтесь, поскольку мы представляем процесс добавления элементов в легенду вместе с twinx() как захватывающее аттракцион.

Представим ситуацию:

Markdown
Скопировать код
У нас есть два друга:
👤 Тим, который предпочитает основную ось, и 👥 Джерри — обожает вторичную.

Несмотря на различные вкусы, они желают сделать общий снимок:

Python
Скопировать код
Tim_ride, = plt.plot(tim_rides, label='Американские горки')
Jerry_ride, = plt.twinx().plot(jerry_rides, label='Чертово колесо')

И вот настал момент объединить их в группе:

Python
Скопировать код
# И...
plt.legend(handles=[Tim_ride, Jerry_ride], title="Наши аттракционы")

Это выглядит как:

Markdown
Скопировать код
📷: [🎢 Тим выбирает "Американские горки", 🎡 Джерри любит "Чертово колесо"]

Таким образом, наши друзья с разными вкусами обретают общий контекст (легенду).

Стоп, может быть, есть автоотмечатель?

Упростите ваш код, добавляя метки прямо во время построения графика. Это как управление трафиком прямо в коде:

Python
Скопировать код
# Рисуем, маркируем и пьем кофе
for i, (y, color, label) in enumerate(zip(ys, colors, labels)):
    ax.plot(x, y, color=color, label=label)

Matplotlib самостоятельно создаст элементы для легенды.

Выразимся через маркеры

Маркеры — это специи в вашем блюде. Они придают особый вкус вашим данным. Великолепно, не так ли?

Python
Скопировать код
# Форма говорит больше, чем тысяча слов
ax_primary.plot(x, y1, 'g^', label='Y1')  # Зеленые треугольники
ax_secondary.plot(x, y2, 'bs', label='Y2')  # Синие квадраты

Благодаря маркерам можно создавать дополнительное визуальное различие между разными наборами данных.

Сохраняем ясность на двойных осях

Правильное использование twinx() требует четкого дизайна, чтобы избежать путаницы. Ясное отделение основной и вторичной осей облегчит понимание вашего графика:

Python
Скопировать код
# Синий цвет в моде сегодня
ax_secondary.spines['right'].set_color('blue')
ax_secondary.yaxis.label.set_color('blue')
ax_secondary.tick_params(axis='y', colors='blue')

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

  1. Python Plotting With Matplotlib (Guide) – Real Python — идеальный старт для всех, кто хочет освоить визуализацию данных в Python.
  2. matplotlib.axes.Axes.twinx — Документация Matplotlib 3.8.2 — знакомьтесь с нашим надежным помощником, официальной документацией по функции twinx().
  3. Medium: Полное руководство по легендам в Matplotlib — ваше путеводитель по миру легенд в Matplotlib.