Функция bar() / barh() в Matplotlib
Справочная документация Matplotlib
bar()Используется для построения вертикальных столбчатых диаграмм,barh()Используется для построения горизонтальных столбчатых диаграмм.
Столбчатые диаграммы используются для отображения количественного сравнения категориальных данных, где каждая категория представлена столбцом, длина которого указывает её значение.
Определение функции
bar() - Вертикальная столбчатая диаграмма
matplotlib.pyplot.bar(x, height, width=0.8, bottom=0, *, align='center',
**kwargs)
barh() - Горизонтальная столбчатая диаграмма
matplotlib.pyplot.barh(y, width, height=0.8, left=0, *, align='center',
**kwargs)
Интерфейс Axes
Axes.bar(x, height, width=0.8, bottom=0, *, align='center', **kwargs) Axes.barh(y, width, height=0.8, left=0, *, align='center', **kwargs)
Описание параметра
| Параметр | Type | Описание |
|---|---|---|
| x / y | массивоподобный | Координаты положения столбцов (x для вертикальных, y для горизонтальных) |
| height / width | массивоподобный | Высота (вертикальная) или ширина (горизонтальная) столбцов, т. е. значения данных |
| width(bar)/ height(barh) | float или array-like | Ширина/высота столбцов, по умолчанию 0.8 |
| bottom / left | float или array-like | Начальная позиция нижней части столбцов, по умолчанию 0. Может использоваться для построения диаграмм с накоплением (stacked bar charts). |
| align | str | Выравнивание столбцов относительно координат x/y: 'center' (по умолчанию) или 'edge' |
| color | color или list | Цвет столбцов, может быть одним цветом или списком цветов |
| edgecolor | color | Цвет границы столбцов |
| linewidth / lw | float | Ширина границы столбца |
| tick_label | массивоподобный | Подписи делений для столбцов, соответствующие взаимно однозначно позициям по x |
| label | str | Подпись легенды (используется для группированных столбчатых диаграмм) |
| альфа | float | Прозрачность |
| hatch | str | Шаблоны заливки: '/', '\\', '|', '-', '+', 'x', 'o', '*' |
Дополнительные примечания к bar_label()
bar_label()Используется для отображения подписей значений непосредственно на столбцах.
Axes.bar_label(container, labels=None, *, fmt=None, label_type='edge',
padding=0, **kwargs)
Оба метода bar() и barh() возвращают
BarContainerобъект, который можно передать в bar_label() для добавления подписей значений. Это рекомендуемый подход в Matplotlib 3.4+.
Примеры использования
Пример 1: Базовая вертикальная столбчатая диаграмма
Пример
# Метки категорий и данные
categories = ['Python', 'Java', 'JavaScript', 'C++', 'Go']
values = [85, 72, 68, 55, 42]
fig, ax = plt.subplots(layout='constrained')
# Нарисовать столбчатую диаграмму
bars = ax.bar(categories, values,
color=['#3498db', '#e74c3c', '#f39c12', '#2E7DCC', '#9b59b6'],
edgecolor='white', linewidth=1)
# Отобразить значения на столбцах
ax.bar_label(bars, fmt='%d', padding=3)
ax.set_title('Популярность языков программирования')
ax.set_ylabel('Баллы')
ax.set_ylim(0, 100)
ax.grid(axis='y', alpha=0.3)
plt.show()
Пример 2: Сгруппированная столбчатая диаграмма
Пример
import numpy as np
# Сгруппированные данные
labels = ['Q1', 'Q2', 'Q3', 'Q4']
product_a = [120, 135, 148, 162]
product_b = [90, 105, 115, 130]
x = np.arange(len(labels)) # позиции x: [0, 1, 2, 3]
width = 0.35 # Ширина каждого столбца
fig, ax = plt.subplots(layout='constrained')
# Первая группа столбцов (смещение -width/2)
bars1 = ax.bar(x - width/2, product_a, width,
label='Продукт A', color='steelblue', edgecolor='white')
# Вторая группа столбцов (смещение +width/2)
bars2 = ax.bar(x + width/2, product_b, width,
label='Продукт B', color='coral', edgecolor='white')
# Добавить подписи значений
ax.bar_label(bars1, padding=3, fmt='%d')
ax.bar_label(bars2, padding=3, fmt='%d')
ax.set_title('Сравнение квартальных продаж')
ax.set_ylabel('Продажи (единицы)')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()
Пример 3: Столбчатая диаграмма с накоплением
Пример
categories = ['Янв', 'Фев', 'Мар', 'Апр', 'Май']
income = [5000, 5200, 4800, 5500, 6000]
expense = [3000, 3500, 3200, 4000, 4200]
fig, ax = plt.subplots(layout='constrained')
# Первый слой столбцов (нижний)
bars_income = ax.bar(categories, income,
label='Доход', color='#2E7DCC', edgecolor='white')
# Второй слой столбцов (наложен поверх первого слоя)
bars_expense = ax.bar(categories, expense, bottom=income,
label='Расход', color='#e74c3c', edgecolor='white')
# Добавить подписи
ax.bar_label(bars_income, label_type='center', fmt='$%d')
ax.bar_label(bars_expense, label_type='center', fmt='$%d')
ax.set_title('Столбчатая диаграмма с накоплением: ежемесячные финансы')
ax.set_ylabel('Сумма ($)')
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()
Пример 4: Горизонтальная столбчатая диаграмма (barh)
Пример
tasks = ['Задача A', 'Задача B', 'Задача C', 'Задача D', 'Задача E']
hours = [12.5, 8.0, 15.3, 6.2, 10.8]
fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')
# Горизонтальная столбчатая диаграмма
bars = ax.barh(tasks, hours,
color='#3498db', edgecolor='white', height=0.6)
# Добавить подписи в конце столбцов
ax.bar_label(bars, fmt='%.1f h', padding=5)
ax.set_title('Время выполнения задачи (горизонтальная столбчатая диаграмма)')
ax.set_xlabel('Часы')
ax.invert_yaxis() # Инвертировать ось y, чтобы первая категория была сверху
ax.grid(axis='x', alpha=0.3)
plt.show()
ЧАВО
Каково соответствие осей для bar() и barh()?
bar(x, height): x — это позиция, height определяет высоту столбца (вертикальное направление).
barh(y, width): y — это позиция, width определяет ширину столбца (горизонтальное направление).
Обратите внимание на разные имена параметров: bar использует height, barh использует width для представления значений данных.
Как расположить столбцы на групповой столбчатой диаграмме рядом друг с другом?
будетwidthУстановите его равным обратной величине общей ширины каждой группы столбцов, и используйтеalign='edge'。
Другие расширения