machine-learningЛекцияPython

Основы визуализации с Matplotlib. Анатомия графика

👀 Загрузка...

Цели лекции

  1. Разобраться в иерархии объектов Matplotlib: что такое Figure и Axes.
  2. Перейти от "Matlab-стиля" (plt.plot) к объектно-ориентированному подходу (ax.plot), который используют профи.
  3. Освоить "Большую четверку" графиков: Line, Scatter, Histogram, Boxplot.

Часть 1: Философия Matplotlib. Объектный подход

Matplotlib — это "дедушка" визуализации в Python. Он низкоуровневый, многословный, но дает абсолютный контроль над каждым пикселем. Даже современные библиотеки (Seaborn, Pandas Plotting) построены поверх него.

1.1. Анатомия графика (The Anatomy of a Figure)

Самая частая ошибка новичка — путаница в терминах. Давайте разберем аналогию "Художник и Холст".

  • Figure (Фигура/Холст): Это ваш чистый лист бумаги или окно приложения. На одном холсте может быть нарисовано несколько графиков.
  • Axes (Оси/График): Это конкретный график с системой координат (оси X и Y), линиями, подписями.

Важное правило

На одной Figure может быть много Axes (например, сетка графиков 2x2), но каждый Axes всегда принадлежит только одной Figure.

1.2. Два интерфейса (State-based vs OOP)

В Matplotlib есть два способа отдать команду. Давайте сравним их:

Это "быстрый, но грязный" подход.

import matplotlib.pyplot as plt
 
# Нарисуй линию на *текущем* активном графике
plt.plot(x, y)
plt.title("Title")

Проблема

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

Рекомендация курса

Мы будем использовать только OOP-подход. Он делает код читаемым, предсказуемым и легко переиспользуемым.


Часть 2: Базовые типы графиков

Инженеру не нужны 100 видов диаграмм. Достаточно четырех основных, чтобы покрыть 90% задач.

2.1. Line Plot (Линейный график)

  • Метод: ax.plot(x, y)
  • Зачем: Показать динамику изменений во времени или непрерывную функцию.
  • Пример: Курс доллара за год, температура двигателя в течение часа.

2.2. Scatter Plot (Точечная диаграмма)

  • Метод: ax.scatter(x, y)
  • Зачем: Показать взаимосвязь (корреляцию) между двумя переменными.
  • Пример: Зависимость "Цена квартиры" vs "Площадь". Если точки выстраиваются в диагональ — зависимость есть. Если это "облако" — зависимости нет.

2.3. Histogram (Гистограмма)

  • Метод: ax.hist(x, bins=20)
  • Зачем: Показать распределение одной переменной. Как часто встречаются разные значения?

Терминология: Bins (Корзины)

Bins определяет, на сколько интервалов мы разбиваем диапазон данных. Например, при распределении возраста клиентов мы увидим "горб" (средний возраст) и "хвосты" (редкие возрастные группы).

2.4. Boxplot ("Ящик с усами")

  • Метод: ax.boxplot(x)
  • Зачем: Компактное сравнение распределений и поиск аномалий. Анатомия ящика:
  • Центральная линия: Медиана.
  • Границы ящика: 25% и 75% квантили (здесь живет половина всех данных).
  • Усы: Диапазон "нормальных" данных.
  • Точки за усами: Выбросы (Outliers).

Часть 3: Оформление и Читаемость

График без подписей — это просто абстрактное искусство. В инженерии график — это документ.

3.1. Обязательные элементы

Каждый ваш график должен иметь:

  1. Title: О чем этот график? (ax.set_title)
  2. Labels: Что отложено по осям и в каких единицах? (ax.set_xlabel, ax.set_ylabel)
  3. Legend: Если линий несколько, какая за что отвечает? (ax.legend)

Контекст важен

График без подписей осей и заголовка считается грубой ошибкой. Всегда давайте контекст вашим визуализациям!

3.2. Управление размером и сохранение

Графики в Jupyter Notebook часто выходят слишком мелкими. А чтобы вставить график в презентацию или отчет, его нужно правильно сохранить:

# Управление размером: Ширина 10, Высота 6 дюймов
fig, ax = plt.subplots(figsize=(10, 6)) 
 
# Построение графика...
ax.plot([1, 2, 3], [10, 20, 15])
 
# Сохранение: dpi=300 для высокого качества
fig.savefig('my_plot.png', dpi=300)