Основы визуализации с Matplotlib. Анатомия графика
Цели лекции
- Разобраться в иерархии объектов Matplotlib: что такое
FigureиAxes. - Перейти от "Matlab-стиля" (
plt.plot) к объектно-ориентированному подходу (ax.plot), который используют профи. - Освоить "Большую четверку" графиков: 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. Обязательные элементы
Каждый ваш график должен иметь:
- Title: О чем этот график? (
ax.set_title) - Labels: Что отложено по осям и в каких единицах? (
ax.set_xlabel,ax.set_ylabel) - 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)