Условие
Сделай в matplotlib чистый график «выручка по неделям» так, чтобы он не стыдно вставить в слайды.
Решение
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(df['week'], df['revenue'], linewidth=2.5, color='#2E86AB')
ax.fill_between(df['week'], df['revenue'], alpha=0.15, color='#2E86AB')
# Убираем мусор
for spine in ['top', 'right']:
ax.spines[spine].set_visible(False)
ax.spines['left'].set_color('#888')
ax.spines['bottom'].set_color('#888')
# Сетка по Y, мягкая
ax.grid(axis='y', alpha=0.3, linestyle='--')
ax.set_axisbelow(True)
# Форматирование осей
ax.set_ylabel('Выручка, ₽', fontsize=11, color='#444')
ax.set_xlabel('')
ax.tick_params(colors='#555', labelsize=10)
# Y-ось в тысячах/миллионах
from matplotlib.ticker import FuncFormatter
ax.yaxis.set_major_formatter(FuncFormatter(lambda x, _: f'{x/1e6:.1f}M ₽'))
# Заголовок и подзаголовок
fig.suptitle('Недельная выручка', fontsize=15, fontweight='bold', x=0.13, ha='left', y=0.98)
ax.set_title('по данным за 2024 год', fontsize=11, loc='left', color='#777', pad=10)
# Аннотация последней точки
last = df.iloc[-1]
ax.annotate(f'{last["revenue"]/1e6:.1f}M ₽',
xy=(last['week'], last['revenue']),
xytext=(10, 0), textcoords='offset points',
fontsize=11, fontweight='bold', color='#2E86AB',
va='center')
plt.tight_layout()
plt.savefig('revenue.png', dpi=200, bbox_inches='tight', facecolor='white')Чек-лист презентационного графика
- Нет лишних spine (top/right убраны).
- Шрифты ≥ 11 pt, контрастный заголовок.
- Осей две, без двойных axes.
- Числа на оси Y отформатированы (M ₽ / k / %).
- Подсветка ключевой точки/значения.
- Цветов ≤ 3, не радуга.
- dpi ≥ 200 для печати.
Подводные камни
- Дефолтный matplotlib выглядит «по-научному» — слишком много сетки, spine, мелкий шрифт. Всегда чистить.
dpi=72— для веба, для слайдов мало. Ставьте 200+.- Title через
ax.set_titleмаленький, для презентации —fig.suptitleкрупнее. tight_layoutиногда обрезает аннотации —bbox_inches='tight'при сохранении лучше.- Цветовая палитра по умолчанию (
tab10) скучная. Бренд-цвета приятнее.
Эталонный ответ
Убрать top/right spines, мягкая сетка по Y, форматер на оси (M ₽), один-два цвета, аннотация ключевой точки, dpi=200.