Matplotlib: Как построить два графика с разными осями Y на одном изображении?

В мире визуализации данных часто возникает необходимость отобразить на одном графике две или более величины, имеющие разные единицы измерения или значительно отличающиеся масштабы. Matplotlib предоставляет мощные инструменты для решения этой задачи, позволяя строить графики с разными осями Y на одном изображении. Это особенно полезно, когда необходимо показать взаимосвязь между разнородными данными.

Зачем использовать разные оси Y?

Представьте, что вы хотите отобразить динамику просмотров страницы и CTR (click-through rate) рекламной кампании. Просмотры измеряются тысячами, а CTR – в процентах. Если отобразить обе величины на одной оси Y, изменения CTR будут практически незаметны. Использование двух осей Y позволяет корректно визуализировать обе величины, делая график более информативным и понятным.

Краткий обзор библиотеки Matplotlib

Matplotlib – это одна из самых популярных библиотек Python для построения графиков и визуализации данных. Она предоставляет широкий набор инструментов для создания различных типов графиков, от простых линейных графиков и диаграмм рассеяния до сложных 3D-визуализаций. Matplotlib позволяет настраивать практически каждый аспект графика, от цветов и шрифтов до расположения осей и легенды.

Основные способы построения двух графиков с разными осями Y

В Matplotlib есть несколько способов построить два графика с разными осями Y на одном изображении. Рассмотрим два основных:

Использование функции twinx()

Функция twinx() создает новую ось Y, которая накладывается на существующую ось X. Это наиболее простой и распространенный способ построения графиков с разными осями Y. twinx() создает «близнеца» текущей оси X, позволяя рисовать данные, связанные с той же осью X, но использующие другую ось Y.

Создание нескольких осей с помощью subplot() и add_subplot()

Этот способ позволяет более гибко управлять расположением осей и графиков. Вы можете создать несколько подграфиков (subplots) и разместить их на одном изображении. Функции subplot() и add_subplot() позволяют определить сетку подграфиков и указать, в каком месте сетки должен располагаться каждый график. Этот метод полезен, когда требуется более сложная компоновка графиков.

Пошаговая инструкция: построение графика температуры и осадков

Предположим, у нас есть данные о среднемесячной температуре и количестве осадков за год. Мы хотим визуализировать эти данные на одном графике с разными осями Y.

Подготовка данных

Сначала импортируем необходимые библиотеки и создадим фиктивные данные:

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


def generate_dummy_data() -> Tuple[List[int], List[float], List[float]]:
    """Generates dummy data for temperature and precipitation.

    Returns:
        A tuple containing lists of months, temperature, and precipitation.
    """
    months: List[int] = list(range(1, 13))
    temperature: List[float] = [i + 10*np.sin(i/2) for i in months]
    precipitation: List[float] = [i + 5*np.cos(i/2) for i in months]
    return months, temperature, precipitation

months, temperature, precipitation = generate_dummy_data()
Реклама

Создание основного графика с первой осью Y (температура)

Теперь создадим основной график для температуры:

fig, ax1 = plt.subplots(figsize=(10, 6))

color = 'tab:red'
ax1.set_xlabel('Месяц')
ax1.set_ylabel('Температура (°C)', color=color)
ax1.plot(months, temperature, color=color)
ax1.tick_params(axis='y', labelcolor=color)

Здесь мы создаем объект fig (рисунок) и ax1 (ось) с помощью plt.subplots(). Затем настраиваем метки осей и строим график температуры.

Добавление второй оси Y и построение графика осадков

Теперь добавим вторую ось Y и построим график осадков:

ax2 = ax1.twinx()

color = 'tab:blue'
ax2.set_ylabel('Осадки (мм)', color=color)
ax2.plot(months, precipitation, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # Чтобы метки не перекрывались
plt.show()

Мы используем ax1.twinx() для создания второй оси, которая разделяет ось X с первой осью. Затем настраиваем метки и цвет для второй оси и строим график осадков. fig.tight_layout() автоматически корректирует параметры подграфиков, чтобы обеспечить размещение всех меток и заголовков без перекрытия.

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

Можно добавить заголовок и легенду для улучшения понимания графика:

fig, ax1 = plt.subplots(figsize=(10, 6))

color = 'tab:red'
ax1.set_xlabel('Месяц')
ax1.set_ylabel('Температура (°C)', color=color)
ax1.plot(months, temperature, color=color, label='Температура')
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()

color = 'tab:blue'
ax2.set_ylabel('Осадки (мм)', color=color)
ax2.plot(months, precipitation, color=color, label='Осадки')
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()

# Добавляем легенду
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

plt.title('График температуры и осадков')
plt.show()

Продвинутые техники и настройки

Совместное использование осей X

При использовании twinx() оси X всегда будут совместными. Это означает, что изменение масштаба или диапазона одной оси X автоматически повлияет на другую.

Настройка диапазонов осей Y для лучшей визуализации

Иногда полезно настроить диапазоны осей Y, чтобы улучшить визуализацию данных. Например, можно использовать ax1.set_ylim() и ax2.set_ylim(), чтобы установить минимальное и максимальное значения для каждой оси Y.

Использование разных типов графиков (линейные, столбчатые) на разных осях

Можно использовать разные типы графиков для каждой оси Y. Например, можно отобразить температуру линейным графиком, а осадки – столбчатой диаграммой.

Заключение и лучшие практики

Преимущества и недостатки использования разных осей Y

Преимущества:

  • Возможность отображения данных с разными единицами измерения или масштабами на одном графике.
  • Улучшение понимания взаимосвязей между различными величинами.

Недостатки:

  • Графики с разными осями Y могут быть сложными для восприятия, особенно если не настроены должным образом.
  • Возможно искажение визуального восприятия данных, если масштабы осей Y выбраны некорректно.

Рекомендации по созданию понятных и информативных графиков

  1. Четко обозначайте единицы измерения для каждой оси Y.
  2. Используйте разные цвета и стили линий для графиков на разных осях.
  3. Добавляйте легенду, чтобы зритель мог легко понять, какой график относится к какой оси.
  4. Настраивайте диапазоны осей Y для лучшей визуализации данных.
  5. Избегайте перегрузки графика излишней информацией.

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


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