Добавление меток второй оси в легенду с twinx() в Matplotlib
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для объединения легенд графиков основной и вторичной оси, созданных с использованием twinx()
в Matplotlib, их нужно собрать воедино. Следуйте этим шагам:
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() # Приглашаем полюбоваться результатом!
Теперь легенда включает информацию об основной и вторичной оси.
Улучшаем вашу легенду
Поработаем над преобразованием обычного списка в образец искусства.
Управление расположением легенды
Размещали бы вы мебель в своем доме в одном и том же месте? Нет, почему и с легендой должно быть иначе. Можете выбрать любое место:
ax_primary.legend(handles, labels, loc='upper left')
Выберите подходящее положение с помощью ключа loc или задайте координаты прямо, используя кортеж (x, y)
.
Обогащение легенды
Станьте стилистом в телешоу для легенд, играя с цветами и шрифтами:
ax_primary.legend(handles, labels, frameon=False, title='Легенда', title_fontsize='large', fontsize='small', shadow=True)
Прокачайте ваши легенды, добавляя изысканность с помощью параметров frameon
, title
и подбирая размеры шрифтов fontsize
и title_fontsize
.
Вводим ошибки
Представьте ошибки профессионально и включаете их в вашу легенду, чтобы подчеркнуть достоверность данных:
# Идеальных данных не существует, как и не существует идеала
ax_primary.errorbar(x, y1, yerr=y1_error, fmt='g-', label='Y1 с ошибкой')
Такой подход демонстрирует вашу точность и аккуратность представления информации.
Визуализация
Приготовтесь, поскольку мы представляем процесс добавления элементов в легенду вместе с twinx()
как захватывающее аттракцион.
Представим ситуацию:
У нас есть два друга:
👤 Тим, который предпочитает основную ось, и 👥 Джерри — обожает вторичную.
Несмотря на различные вкусы, они желают сделать общий снимок:
Tim_ride, = plt.plot(tim_rides, label='Американские горки')
Jerry_ride, = plt.twinx().plot(jerry_rides, label='Чертово колесо')
И вот настал момент объединить их в группе:
# И...
plt.legend(handles=[Tim_ride, Jerry_ride], title="Наши аттракционы")
Это выглядит как:
📷: [🎢 Тим выбирает "Американские горки", 🎡 Джерри любит "Чертово колесо"]
Таким образом, наши друзья с разными вкусами обретают общий контекст (легенду).
Стоп, может быть, есть автоотмечатель?
Упростите ваш код, добавляя метки прямо во время построения графика. Это как управление трафиком прямо в коде:
# Рисуем, маркируем и пьем кофе
for i, (y, color, label) in enumerate(zip(ys, colors, labels)):
ax.plot(x, y, color=color, label=label)
Matplotlib самостоятельно создаст элементы для легенды.
Выразимся через маркеры
Маркеры — это специи в вашем блюде. Они придают особый вкус вашим данным. Великолепно, не так ли?
# Форма говорит больше, чем тысяча слов
ax_primary.plot(x, y1, 'g^', label='Y1') # Зеленые треугольники
ax_secondary.plot(x, y2, 'bs', label='Y2') # Синие квадраты
Благодаря маркерам можно создавать дополнительное визуальное различие между разными наборами данных.
Сохраняем ясность на двойных осях
Правильное использование twinx()
требует четкого дизайна, чтобы избежать путаницы. Ясное отделение основной и вторичной осей облегчит понимание вашего графика:
# Синий цвет в моде сегодня
ax_secondary.spines['right'].set_color('blue')
ax_secondary.yaxis.label.set_color('blue')
ax_secondary.tick_params(axis='y', colors='blue')
Полезные материалы
- Python Plotting With Matplotlib (Guide) – Real Python — идеальный старт для всех, кто хочет освоить визуализацию данных в Python.
- matplotlib.axes.Axes.twinx — Документация Matplotlib 3.8.2 — знакомьтесь с нашим надежным помощником, официальной документацией по функции twinx().
- Medium: Полное руководство по легендам в Matplotlib — ваше путеводитель по миру легенд в Matplotlib.