Matplotlib: Как создать визуализации данных в Python? Часть 1

Что такое Matplotlib и зачем он нужен?

Matplotlib – это фундаментальная библиотека для визуализации данных в Python. Она предоставляет широкие возможности для создания статических, интерактивных и анимированных графиков. В контексте data science и web-разработки, Matplotlib позволяет представлять результаты анализа данных, строить графики динамики рекламных кампаний, визуализировать распределение конверсий и многое другое. В отличие от более специализированных библиотек, таких как Seaborn или Folium, Matplotlib является низкоуровневым инструментом, предоставляющим полный контроль над каждым элементом визуализации. Это делает её незаменимой для создания кастомизированных графиков, отвечающих специфическим требованиям проекта. Возможность интеграции с другими библиотеками Python, такими как NumPy и Pandas, делает Matplotlib краеугольным камнем в анализе и представлении данных.

Установка Matplotlib

Установка Matplotlib тривиальна и может быть выполнена с помощью pip:

pip install matplotlib

Рекомендуется использовать виртуальное окружение для изоляции зависимостей вашего проекта.

Основные компоненты Matplotlib: фигуры, оси, графики

В Matplotlib визуализация строится вокруг трех основных компонентов:

  1. Фигура (Figure): Это контейнер верхнего уровня, содержащий все элементы графика (оси, заголовки, легенды и т.д.). Можно представить это как холст, на котором рисуется изображение.
  2. Оси (Axes): Это область, на которой отображаются данные. Каждая фигура может содержать несколько осей, позволяя создавать подграфики. Ось определяет систему координат для отображения данных.
  3. Графики (Plots): Это фактическое визуальное представление данных (линии, точки, столбцы и т.д.). Графики рисуются на осях и определяют, как данные отображаются визуально.

Создание простых графиков с помощью Pyplot

pyplot — это модуль в Matplotlib, предоставляющий простой интерфейс для создания графиков, во многом похожий на MATLAB.

Линейные графики (plot): основы

Линейные графики используются для отображения зависимости одной переменной от другой. Например, можно отобразить динамику изменения CTR (Click-Through Rate) рекламной кампании во времени.

import matplotlib.pyplot as plt
from typing import List


def plot_ctr(dates: List[str], ctrs: List[float]) -> None:
    """Plots CTR over time.

    Args:
        dates: List of dates.
        ctrs: List of CTR values.
    """
    plt.plot(dates, ctrs)
    plt.xlabel("Дата")
    plt.ylabel("CTR")
    plt.title("Динамика CTR рекламной кампании")
    plt.grid(True)
    plt.show()

# Пример использования
dates = ["2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05"]
ctrs = [0.02, 0.025, 0.022, 0.03, 0.028]
plot_ctr(dates, ctrs)

Точечные диаграммы (scatter): визуализация зависимостей

Точечные диаграммы используются для отображения взаимосвязи между двумя переменными. Они полезны для выявления корреляций и кластеров. Например, можно визуализировать зависимость между бюджетом рекламной кампании и количеством конверсий.

import matplotlib.pyplot as plt
from typing import List


def scatter_plot_budget_conversions(budget: List[float], conversions: List[int]) -> None:
    """Creates a scatter plot of budget vs. conversions.

    Args:
        budget: List of budget values.
        conversions: List of conversion counts.
    """
    plt.scatter(budget, conversions)
    plt.xlabel("Бюджет")
    plt.ylabel("Количество конверсий")
    plt.title("Зависимость количества конверсий от бюджета")
    plt.grid(True)
    plt.show()

# Пример использования
budget = [100, 200, 300, 400, 500]
conversions = [10, 25, 30, 45, 50]
scatter_plot_budget_conversions(budget, conversions)

Гистограммы (hist): анализ распределения данных

Гистограммы используются для отображения распределения одной переменной. Например, можно проанализировать распределение возраста пользователей, посещающих сайт.

import matplotlib.pyplot as plt
from typing import List


def plot_user_age_distribution(ages: List[int]) -> None:
    """Plots the distribution of user ages.

    Args:
        ages: List of user ages.
    """
    plt.hist(ages, bins=10)
    plt.xlabel("Возраст")
    plt.ylabel("Количество пользователей")
    plt.title("Распределение возраста пользователей")
    plt.grid(True)
    plt.show()

# Пример использования
ages = [20, 25, 30, 35, 40, 22, 27, 32, 37, 42, 24, 29, 34, 39, 44]
plot_user_age_distribution(ages)

Столбчатые диаграммы (bar): сравнение категорий

Столбчатые диаграммы используются для сравнения значений различных категорий. Например, можно сравнить количество кликов по различным рекламным объявлениям.

import matplotlib.pyplot as plt
from typing import List


def plot_ad_clicks(ads: List[str], clicks: List[int]) -> None:
    """Plots the number of clicks for different ads.

    Args:
        ads: List of ad names.
        clicks: List of click counts.
    """
    plt.bar(ads, clicks)
    plt.xlabel("Рекламное объявление")
    plt.ylabel("Количество кликов")
    plt.title("Количество кликов по рекламным объявлениям")
    plt.grid(axis='y')
    plt.show()

# Пример использования
ads = ["Ad 1", "Ad 2", "Ad 3", "Ad 4", "Ad 5"]
clicks = [100, 150, 120, 180, 200]
plot_ad_clicks(ads, clicks)
Реклама

Настройка визуализаций в Matplotlib

Заголовки, подписи осей и легенды

Правильное оформление графика делает его понятным и информативным. Заголовки и подписи осей необходимы для описания данных, а легенда – для идентификации различных элементов на графике.

import matplotlib.pyplot as plt
from typing import List

def plot_data_with_labels(x_data: List[float], y_data1: List[float], y_data2: List[float], label1: str, label2: str, title: str, x_label: str, y_label: str) -> None:
  """Plots two sets of data with labels and a legend."""
  plt.plot(x_data, y_data1, label=label1)
  plt.plot(x_data, y_data2, label=label2)
  plt.xlabel(x_label)
  plt.ylabel(y_label)
  plt.title(title)
  plt.legend()
  plt.show()

x_data = [1, 2, 3, 4, 5]
y_data1 = [2, 4, 6, 8, 10]
y_data2 = [1, 3, 5, 7, 9]
plot_data_with_labels(x_data, y_data1, y_data2, "Series 1", "Series 2", "Sample Plot", "X-axis", "Y-axis")

Настройка цветов, маркеров и стилей линий

Matplotlib предоставляет широкие возможности для настройки внешнего вида графиков. Можно изменять цвета линий, типы маркеров и стили линий, чтобы выделить важные элементы или сделать график более привлекательным.

import matplotlib.pyplot as plt
from typing import List


def plot_data_with_styles(x_data: List[float], y_data: List[float]) -> None:
    """Plots data with custom colors, markers, and line styles."""
    plt.plot(x_data, y_data, color='red', linestyle='--', marker='o', markersize=8)
    plt.xlabel("X-axis")
    plt.ylabel("Y-axis")
    plt.title("Styled Plot")
    plt.show()

x_data = [1, 2, 3, 4, 5]
y_data = [2, 4, 1, 3, 5]
plot_data_with_styles(x_data, y_data)

Изменение диапазонов осей

Иногда необходимо изменить диапазоны осей, чтобы лучше отобразить данные или сфокусироваться на определенной области графика.

import matplotlib.pyplot as plt
from typing import List


def plot_data_with_axis_limits(x_data: List[float], y_data: List[float], x_min: float, x_max: float, y_min: float, y_max: float) -> None:
    """Plots data with custom axis limits."""
    plt.plot(x_data, y_data)
    plt.xlim(x_min, x_max)
    plt.ylim(y_min, y_max)
    plt.xlabel("X-axis")
    plt.ylabel("Y-axis")
    plt.title("Plot with Custom Axis Limits")
    plt.show()

x_data = [1, 2, 3, 4, 5]
y_data = [2, 4, 1, 3, 5]
plot_data_with_axis_limits(x_data, y_data, 0, 6, 0, 6)

Добавление текста и аннотаций

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

import matplotlib.pyplot as plt

def plot_with_annotations() -> None:
  """Plots data and adds annotations."""
  x = [1, 2, 3, 4, 5]
  y = [2, 4, 1, 3, 5]
  plt.plot(x, y)
  plt.xlabel("X-axis")
  plt.ylabel("Y-axis")
  plt.title("Plot with Annotations")
  plt.annotate('Important Point', xy=(2, 4), xytext=(3, 5), arrowprops=dict(facecolor='black', shrink=0.05))
  plt.text(1, 1, "Additional Text")
  plt.show()

plot_with_annotations()

Работа с несколькими графиками и подграфиками

Создание нескольких графиков в одной фигуре (subplots)

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

import matplotlib.pyplot as plt
from typing import List


def create_subplots(x_data: List[float], y_data1: List[float], y_data2: List[float]) -> None:
    """Creates two subplots in one figure.

    Args:
        x_data: List of x-axis data.
        y_data1: List of y-axis data for the first subplot.
        y_data2: List of y-axis data for the second subplot.
    """
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))  # 1 row, 2 columns

    ax1.plot(x_data, y_data1)
    ax1.set_title("Subplot 1")
    ax1.set_xlabel("X-axis")
    ax1.set_ylabel("Y-axis")

    ax2.plot(x_data, y_data2, color='red')
    ax2.set_title("Subplot 2")
    ax2.set_xlabel("X-axis")
    ax2.set_ylabel("Y-axis")

    plt.tight_layout()
    plt.show()

x_data = [1, 2, 3, 4, 5]
y_data1 = [2, 4, 1, 3, 5]
y_data2 = [1, 3, 2, 4, 1]
create_subplots(x_data, y_data1, y_data2)

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

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

import matplotlib.pyplot as plt
from typing import List


def create_subplots_shared_axes(x_data: List[float], y_data1: List[float], y_data2: List[float]) -> None:
    """Creates two subplots sharing the x-axis.

    Args:
        x_data: List of x-axis data.
        y_data1: List of y-axis data for the first subplot.
        y_data2: List of y-axis data for the second subplot.
    """
    fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

    ax1.plot(x_data, y_data1)
    ax1.set_title("Subplot 1")
    ax1.set_ylabel("Y-axis 1")

    ax2.plot(x_data, y_data2, color='red')
    ax2.set_title("Subplot 2")
    ax2.set_xlabel("X-axis")
    ax2.set_ylabel("Y-axis 2")

    plt.tight_layout()
    plt.show()

x_data = [1, 2, 3, 4, 5]
y_data1 = [2, 4, 1, 3, 5]
y_data2 = [1, 3, 2, 4, 1]
create_subplots_shared_axes(x_data, y_data1, y_data2)

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

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

import matplotlib.pyplot as plt


def create_subplots_custom_layout() -> None:
    """Creates subplots with a custom layout using subplots_adjust."""
    fig, (ax1, ax2) = plt.subplots(1, 2)
    ax1.plot([1, 2, 3], [4, 5, 6])
    ax2.plot([1, 2, 3], [6, 5, 4])

    plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.4, hspace=0.4)
    plt.show()

create_subplots_custom_layout()

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