Отображение значений на горизонтальных столбцах в Matplotlib
Быстрый ответ
Если вам требуется отразить значения на горизонтальных столбцах с использованием matplotlib для Python, воспользуйтесь функцией plt.text
для расположения аннотаций на каждом из столбцов. Пример ниже позволит понять, как это работает:
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()
Желаете сделать ваши метки более красочными и информативными? Изучите возможности регулирования параметров выравнивания текста.
Тонкости внедрения: улучшаем метки на столбцах
Точное расположение: избавляемся от перекрытий
Для преодоления перекрытия меток и повышения читаемости важно тщательно настроить позицию и стиль текста:
# Размещаем метки так, чтобы они не перекрывали друг друга
for index, value in enumerate(values):
plt.text(value + 0.1, index, str(value), va='center', ha='start', color='blue', fontweight='bold') # Громкие синие метки устанавливаем в начале столбца
Разделители тысяч: обращаемся с большими числами
Работая с большими числами, лучше добавить разделители тысяч для повышения читаемости:
# Делаем большие числа более ясными
for index, value in enumerate(values):
plt.text(value + 0.1, index, f'{value:,}', va='center', ha='start') # Разделяем группы цифр запятыми
Индивидуализация стиля: настройка шрифтов
Творчески подойдите к стилизации текста, воспользовавшись параметрами fontsize
, color
и fontweight
или всем комплектом стилей fontdict
:
# Настраиваем внешний вид меток
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
, которая автоматически добавляет метки:
# Аннотация упрощается до предела
fig, ax = plt.subplots()
bars = ax.barh(categories, values)
ax.bar_label(bars)
Учет отрицательных значений: корректируем позиционирование
Если у вас присутствуют отрицательные значения, регулируйте расположение меток в соответствии с их знаком:
# Корректируем размещение меток для отрицательных значений
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)
Визуализация
Воспринимайте горизонтальные столбики как домашних любимцев, а метки – как их именные таблички:
| 🐶 (15) | 🐱 (30) | 🐹 (45) |
| Спот | Митенс | Пипсквик |
Также как табличка с именем опознает животное, так столбик с значением даёт точное представление о его величине.
Визуализация данных с несколькими столбцами
Создайте диаграмму с несколькими рядами столбцов и добавьте к каждому из них метки, чтобы сделать график информативнее:
# Графики с множеством столбиков выглядят завораживающе
for bar_group in ax.containers:
ax.bar_label(bar_group, label_type='edge') # Отмечаем каждую группу столбцов
Соответствие цветов: выделяем категории
В работе с различными категориями воспользуйтесь цветовой кодировкой и легендами для удобства их различения:
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()
можно предотвратить взаимное перекрытие элементов графика, обеспечив чистоту и аккуратность ваших визуализаций:
# Облегчаем восприятие графика
plt.tight_layout()