name: visualization description: | график, диаграмма, визуализация, нарисуй, построй график, динамика на графике, тренд, столбчатая, линейная, гистограмма, scatter, heatmap, барчарт
Skill: Визуализация данных (matplotlib / seaborn)
Когда строить график
График — только если вопрос про:
- динамику во времени (тренд по дням/неделям/месяцам)
- сравнение нескольких сущностей (3+ кампаний, каналов, сегментов)
- распределение значений (гистограмма, boxplot)
На факты и разовые цифры — график не нужен.
Обязательные правила оформления
import matplotlib.pyplot as plt
import seaborn as sns
# Подписи ТОЛЬКО на русском:
plt.title("Динамика визитов по неделям", fontsize=14)
plt.xlabel("Неделя")
plt.ylabel("Визиты")
# Обязательно перед следующим plt.figure():
plt.tight_layout()
# Легенда если несколько линий:
plt.legend(loc='best')
Настройки фигуры
fig, ax = plt.subplots(figsize=(12, 6))
# или для двух рядом:
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
Форматирование осей с большими числами
import matplotlib.ticker as mticker
ax.yaxis.set_major_formatter(mticker.FuncFormatter(lambda x, _: f"{x:,.0f}"))
Цветовые палитры
# Для нескольких категорий:
colors = sns.color_palette("husl", n_colors=len(df['category'].unique()))
# Для тепловой карты:
sns.heatmap(pivot, cmap='YlOrRd', fmt='.0f', annot=True)
Типы графиков по задаче
| Задача | Тип графика |
|---|---|
| Динамика по времени | plt.plot() или sns.lineplot() |
| Сравнение категорий | sns.barplot() или plt.bar() |
| Распределение | sns.histplot() или sns.boxplot() |
| Два показателя | plt.twinx() (двойная ось Y) |
| Доли | plt.pie() — только если <6 категорий |
Запрещено
- Эмодзи в подписях осей и заголовках
- Английские подписи (всё на русском)
- График без
plt.tight_layout() plt.show()— не нужен в sandbox, вывод захватывается автоматическиplt.savefig(...)— НЕЛЬЗЯ, сохранение в файл ломает захват изображения sandbox'ом, пользователь не увидит графикplt.close()/plt.close("all")— НЕЛЬЗЯ, закрытие фигуры до захвата sandbox'ом даст пустой белый листplt.savefig(...)— никогда не вызывать. Sandbox сам захватывает все открытые фигуры после выполнения кода. Вызов savefig ничего не добавляет, аplt.close()после него сделает график невидимым для пользователяplt.close()/plt.close("all")— никогда не вызывать. Закрытая фигура не будет захвачена sandbox'ом и не будет показана пользователю