</>
Topic 3 of 5

Course materials are currently available in Russian only.

Столбчатые и круговые диаграммы

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

Столбчатая диаграмма

import matplotlib.pyplot as plt

fruits = ["яблоки", "груши", "сливы"]
kg = [120, 75, 40]

plt.bar(fruits, kg)
plt.title("Урожай, кг")

plt.bar(категории, высоты) рисует по столбцу на каждую категорию. Категории могут быть строками — они станут подписями под столбцами в том же порядке.

Оформление:

plt.bar(fruits, kg, color="tab:green", width=0.5, edgecolor="black")

color может быть и списком — по цвету на каждый столбец: color=["red", "green", "blue"].

Порядок столбцов

Столбцы идут в том порядке, в каком переданы данные. Чтобы диаграмма читалась легко, их обычно сортируют — сначала данные, потом рисование:

pairs = sorted(zip(kg, fruits), reverse=True)   # по убыванию урожая
plt.bar([f for _, f in pairs], [k for k, _ in pairs])

Горизонтальные столбцы

Когда названий много или они длинные, удобнее горизонтальная диаграмма:

plt.barh(["Москва", "Санкт-Петербург", "Новосибирск"], [13.1, 5.6, 1.6])
plt.xlabel("Население, млн")

У barh категории — по вертикальной оси (первая — внизу), а длины — по горизонтальной.

Подписи значений над столбцами

bars = plt.bar(fruits, kg)
plt.bar_label(bars)          # число над каждым столбцом

Столбцы рядом

Чтобы сравнить две серии по одним категориям, столбцы сдвигают:

import numpy as np

x = np.arange(len(fruits))
plt.bar(x - 0.2, [120, 75, 40], width=0.4, label="2025")
plt.bar(x + 0.2, [100, 90, 55], width=0.4, label="2026")
plt.xticks(x, fruits)        # подписи категорий под парами столбцов
plt.legend()

Круговая диаграмма

Круговая диаграмма показывает, какую долю целого составляет каждая часть:

plt.pie([45, 30, 25], labels=["жильё", "еда", "прочее"], autopct="%1.0f%%")
  • значения не обязаны быть процентами: matplotlib сам делит каждое на сумму;
  • labels — подписи секторов;
  • autopct — подписать проценты на секторах ("%1.1f%%" — с одним знаком после запятой).

Секторы с нулевым значением рисовать бессмысленно — их лучше убрать из данных заранее.

Круговая диаграмма хороша для 2–6 частей. Когда частей больше или они близки по размеру, столбцы читаются лучше: человеческий глаз плохо сравнивает углы.

Итог

  • plt.bar(категории, значения) — вертикальные столбцы, plt.barh — горизонтальные;
  • порядок столбцов = порядок данных; сортируй заранее;
  • color, width, bar_label — оформление; сдвиг по x — столбцы рядом;
  • plt.pie(значения, labels=...) — доли целого, autopct — проценты на секторах.