← Все курсы · Курс Python

Диаграммы на Python без культа карго: шесть важных линий

Майкл Носито · Обновлено в августе 2026 г. · Все числа на этой странице были обработаны до их публикации.

Большая часть кода matplotlib копируется, и большая часть его копируется из стиля конечного автомата, который работает для одной диаграммы и теряет смысл для двух. Шесть строк охватывают практически все, что нужно аналитику, и их стоит набирать по памяти.

Что вы делаете: создаёте фигуру и оси, строите график по осям, маркируете всё, сохраняете в ограничивающей рамке.

Краткая версия. fig это страница, ax это диаграмма на нем. Вызов методов включен ax.

Шесть линий

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 4.5))
ax.bar(totals.index, totals.values, color='#0E7490')
ax.set_title('East sells most, West sells least')
ax.set_ylabel('Revenue')
ax.spines[['top', 'right']].set_visible(False)
fig.savefig('revenue.png', dpi=200, bbox_inches='tight')

Это диаграмма, которую кто-то может вставить в документ, не извиняясь за это. Построчно: фигура с разумным соотношением сторон, один вызов графика, заголовок, в котором говорится о находке, единица измерения на оси, две удаленные границы и сохранение, в котором метки не обрезаются.

Почему форма объекта

# state machine: acts on whichever axes is current
plt.plot(x, y)
plt.title('...')

# object oriented: says which axes it means
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('...')

В одной диаграмме они эквивалентны. При использовании двух версия конечного автомата зависит от того, какие оси активны в данный момент, что определяется порядком вызовов и всем, что pandas делали в пути. Форма объекта не имеет двусмысленности, и именно ее в конечном итоге использует каждый более крупный пример.

Обратите внимание на имя: функция pyplot title, метод осей set_title. Что set_ Префикс сбивает людей с толку при конвертации старого кода.

Несколько графиков

fig, axes = plt.subplots(1, 2, figsize=(11, 4), sharey=True)

axes[0].bar(jan.index, jan.values)
axes[0].set_title('January')

axes[1].bar(feb.index, feb.values)
axes[1].set_title('February')

fig.suptitle('January outsold February by more than two to one')
fig.tight_layout()

sharey=True это важный аргумент. Две диаграммы, расположенные рядом, с разными масштабами по оси й, вызывают именно то сравнение, которое они не могут поддержать, а это версия проблемы с малыми кратными. Двухосевые диаграммы.

Заговор от pandas

totals = df.groupby('region')['amount'].sum().sort_values()

fig, ax = plt.subplots(figsize=(7, 4))
totals.plot(kind='barh', ax=ax, color='#0E7490')
ax.set_xlabel('Revenue')
ax.set_title('East is 3 times West')

Прохождение ax=ax это то, что позволяет вам контролировать ситуацию: pandas рисует на ваших осях, а вы сохраняете все методы маркировки. Сортировка перед построением графика — это вторая половина, поскольку диаграмма в алфавитном порядке предлагает читателю самому выполнить ранжирование.

Значения по умолчанию, которые стоит изменить один раз

по умолчаниюИзменить наПочему
Коробка со всех четырех сторонУдалить верхнюю и правую частьМеньше чернил, та же информация
Маленький шрифт по умолчанию11 или 12Диаграммы вставляются и сжимаются
Нет разделителя тысячСредство форматирования запятых1200000 не читается
Размер фигуры по умолчанию8 х 4,5 для слайдаСоответствует широкоэкранному макету
Десятицветный циклОдин цвет или дваЦвет должен что-то означать
ax.yaxis.set_major_formatter(
    plt.matplotlib.ticker.StrMethodFormatter('{x:,.0f}'))

plt.rcParams.update({'font.size': 11, 'axes.spines.top': False,
                     'axes.spines.right': False, 'figure.dpi': 110})

Положите rcParams блок в верхней части шаблона записной книжки, и каждая диаграмма в файле наследует его, поэтому набор диаграмм начинает выглядеть как один набор, а не как девять.

Маркировка полосок

bars = ax.bar(totals.index, totals.values, color='#0E7490')
ax.bar_label(bars, fmt='{:,.0f}', padding=3)
ax.get_yaxis().set_visible(False)

Как только каждая полоса будет иметь свой номер, ось станет ненужной и ее можно будет использовать. Часто это самая чистая диаграмма на слайде: столбцы с пометками, заголовок, подтверждающий результат, и ничего больше.

Сохранение

fig.savefig('chart.png', dpi=200, bbox_inches='tight')
fig.savefig('chart.svg', bbox_inches='tight')   # scales, for print

dpi=200 для всего, что будет рассматриваться, bbox_inches='tight' всегда. SVG, когда размер диаграммы будет изменен, поскольку она остается четкой. И замыкаем фигуры в петлю с помощью plt.close(fig), или длительный скрипт накапливает их в памяти.

Как применить это в своей работе

  1. Преобразование одной существующей диаграммы из plt. звонки в fig, ax форма. Это механическое изменение, и оно облегчает следующее.
  2. Поставьте rcParams блок в верхней части вашего шаблона сегодня.
  3. Дайте каждой диаграмме название, отражающее результат, а не содержание.
  4. Перед построением графика выполните сортировку, если только категории не имеют естественного порядка.
  5. Сохранить с bbox_inches="tight" и проверьте файл, а не предварительный просмотр записной книжки.

Единственная привычка, которую нужно сохранить

Сначала напишите заголовок. Он определяет, для чего предназначена диаграмма, и часто обнаруживает, что диаграмма, которую вы собирались нарисовать, была не той, которая ее показывает.

Выживет ли ваша последняя диаграмма Python, если ее вставить в документ без объяснения причин?

Написано из библиотеки в процессе доставки. тот set_ методы префиксных осей, bar_label, StrMethodFormatter и bbox_inches все текущие matplotlib.
Диаграмма без заголовка и осью по умолчанию — это диаграмма, которую нужно объяснять вслух.

Диаграммы и визуализация — это книга по выбору карт: что может нести каждая фигура, что она незаметно искажает и как обозначить ее, чтобы читатель мог прийти к вашему выводу без каких-либо указаний.

Диаграммы и визуализация, 19 $ →
Выбор диаграммы имеет большее значение, чем библиотека.

Выбор правильного графика и названия диаграмм примените все, что вы рисуете. Курс Python закрывает сторону pandas.

Читать «Выберите правильный график» →