Ответ
Я активно использовал matplotlib для анализа данных, отладки моделей и создания отчетов. Вот типичные сценарии и примеры:
1. Быстрый анализ и отладка (используя pyplot интерфейс):
import matplotlib.pyplot as plt
import numpy as np
# Анализ распределения ошибок модели
errors = np.random.normal(0, 1, 1000)
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# Гистограмма
axes[0].hist(errors, bins=30, edgecolor='black', alpha=0.7)
axes[0].set_title('Распределение ошибок')
axes[0].set_xlabel('Ошибка')
axes[0].set_ylabel('Частота')
axes[0].axvline(x=0, color='r', linestyle='--', label='Ноль')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
# Q-Q plot для проверки нормальности
from scipy import stats
stats.probplot(errors, dist="norm", plot=axes[1])
axes[1].set_title('Q-Q Plot')
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('error_analysis.png', dpi=150, bbox_inches='tight') # Сохранение для отчета
plt.show()
2. Визуализация временных рядов и динамики метрик:
# Мониторинг метрик обучения модели
epochs = range(1, 21)
train_loss = [1/np.log(e+1) + np.random.rand()*0.1 for e in epochs]
val_loss = [1.2/np.log(e+1) + np.random.rand()*0.1 for e in epochs]
plt.figure(figsize=(10, 5))
plt.plot(epochs, train_loss, 'b-o', label='Train Loss', linewidth=2, markersize=6)
plt.plot(epochs, val_loss, 'r--s', label='Validation Loss', linewidth=2, markersize=6)
plt.title('Кривые обучения модели', fontsize=14)
plt.xlabel('Эпоха', fontsize=12)
plt.ylabel('Loss', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, linestyle=':', alpha=0.7)
plt.fill_between(epochs, train_loss, val_loss, alpha=0.1, color='gray')
plt.xticks(epochs)
3. Создание сложных композиций графиков (subplots, GridSpec):
- Для сравнения нескольких моделей или датасетов.
- Совмещение scatter plot, bar chart и line plot на одной фигуре.
Ключевые практики, которым я следую:
- Всегда задаю
figsizeдля контроля размера. - Добавляю подписи (
title,xlabel,ylabel) и легенду (legend) для читаемости. - Использую
tight_layout()для автоматической корректировки отступов. - Для интеграции в веб-приложения или дашборды (например, Dash/Streamlit) конвертирую график в PNG или сохраняю напрямую в буфер (
BytesIO). - В Jupyter Notebook использую
%matplotlib inlineдля встраивания графиков.