Отображение значений на горизонтальных столбцах в Matplotlib

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам требуется отразить значения на горизонтальных столбцах с использованием matplotlib для Python, воспользуйтесь функцией plt.text для расположения аннотаций на каждом из столбцов. Пример ниже позволит понять, как это работает:

Python
Скопировать код
import matplotlib.pyplot as plt

# Иллюстративный набор категорий и значений
categories, values = ['A', 'B', 'C', 'D'], [10, 15, 20, 25]

# Создаём простейший график 
plt.barh(categories, values)

# Добавляем метки к каждому столбцу
for index, value in enumerate(values):
    plt.text(value, index, str(value))

# Отображаем график 
plt.show()

Желаете сделать ваши метки более красочными и информативными? Изучите возможности регулирования параметров выравнивания текста.

Кинга Идем в IT: пошаговый план для смены профессии

Тонкости внедрения: улучшаем метки на столбцах

Точное расположение: избавляемся от перекрытий

Для преодоления перекрытия меток и повышения читаемости важно тщательно настроить позицию и стиль текста:

Python
Скопировать код
# Размещаем метки так, чтобы они не перекрывали друг друга
for index, value in enumerate(values):
    plt.text(value + 0.1, index, str(value), va='center', ha='start', color='blue', fontweight='bold')  # Громкие синие метки устанавливаем в начале столбца

Разделители тысяч: обращаемся с большими числами

Работая с большими числами, лучше добавить разделители тысяч для повышения читаемости:

Python
Скопировать код
# Делаем большие числа более ясными
for index, value in enumerate(values):
    plt.text(value + 0.1, index, f'{value:,}', va='center', ha='start')  # Разделяем группы цифр запятыми

Индивидуализация стиля: настройка шрифтов

Творчески подойдите к стилизации текста, воспользовавшись параметрами fontsize, color и fontweight или всем комплектом стилей fontdict:

Python
Скопировать код
# Настраиваем внешний вид меток
font_settings = {'fontsize': 10, 'color': 'black', 'fontweight': 'bold'}
for index, value in enumerate(values):
    plt.text(value + 0.1, index, str(value), va='center', ha='start', fontdict=font_settings)  # Стилизуем метки

Создаем аннотацию как профи: Продвинутые техники

Удобство использования функции bar_label

Если вы используете matplotlib начиная с версии 3.4.0, можно упростить задачу с помощью функции Axes.bar_label, которая автоматически добавляет метки:

Python
Скопировать код
# Аннотация упрощается до предела
fig, ax = plt.subplots()
bars = ax.barh(categories, values)
ax.bar_label(bars)

Учет отрицательных значений: корректируем позиционирование

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

Python
Скопировать код
# Корректируем размещение меток для отрицательных значений
for index, value in enumerate(values):
    if value < 0:
        ha_pos = 'end'
        offset = -0.1
    else:
        ha_pos = 'start'
        offset = 0.1

    plt.text(value + offset, index, str(value), va='center', ha=ha_pos)

Визуализация

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

Markdown
Скопировать код
| 🐶 (15) | 🐱 (30) | 🐹 (45) |
|   Спот   |  Митенс |  Пипсквик |

Также как табличка с именем опознает животное, так столбик с значением даёт точное представление о его величине.

Визуализация данных с несколькими столбцами

Создайте диаграмму с несколькими рядами столбцов и добавьте к каждому из них метки, чтобы сделать график информативнее:

Python
Скопировать код
# Графики с множеством столбиков выглядят завораживающе
for bar_group in ax.containers:
    ax.bar_label(bar_group, label_type='edge')  # Отмечаем каждую группу столбцов

Соответствие цветов: выделяем категории

В работе с различными категориями воспользуйтесь цветовой кодировкой и легендами для удобства их различения:

Python
Скопировать код
color_palette = ['red', 'green', 'blue', 'orange']  # Применяем цвета для категоризации
for index, (value, color) in enumerate(zip(values, color_palette)):
    plt.barh(index, value, color=color, label=f'Категория {categories[index]}')  # Каждую категорию отображаем в её цвете
plt.legend()

Подгонка layout: предотвращаем перекрытия

С применением plt.tight_layout() можно предотвратить взаимное перекрытие элементов графика, обеспечив чистоту и аккуратность ваших визуализаций:

Python
Скопировать код
# Облегчаем восприятие графика
plt.tight_layout()

Полезные материалы