Я создал столбчатый график, как я могу отобразить значение столбца на каждом столбце?
Текущий сюжет:
Что я пытаюсь получить:
Мой код:
import os
import numpy as np
import matplotlib.pyplot as plt
x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD']
y = [160, 167, 137, 18, 120, 36, 155, 130]
fig, ax = plt.subplots()
width = 0.75 # the width of the bars
ind = np.arange(len(y)) # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
#plt.show()
plt.savefig(os.path.join('test.png'), dpi=300, format='png', bbox_inches='tight') # use format='svg' or 'pdf' for vectorial pictures
python
matplotlib
bar-chart
Франк Дернонкур
источник
источник
plt.text(v, i, " "+str(v), color='blue', va='center', fontweight='bold')
plt.show()
пункт в конце. Например:df.plot(); plt.show()
Я заметил, что код примера api содержит пример гистограммы со значением столбца, отображаемым на каждом столбце:
вывод:
FYI Какая единица измерения переменной высоты в «barh» matplotlib? (на данный момент нет простого способа установить фиксированную высоту для каждой полосы)
источник
Для тех, кто хочет иметь свою метку в основании своих столбцов, просто разделите v на значение метки следующим образом:
(примечание: я добавил 100, так что это было не совсем внизу)
Чтобы получить такой результат:
источник
v == labels[i]
и так могла просто быть третья и четвертая строчки101, v
?Используйте plt.text (), чтобы вставить текст в график.
Пример:
Это покажет цифру как:
гистограмма со значениями вверху
источник
plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20), va='center')
Я знаю, что это старая ветка, но я несколько раз заходил сюда через Google и думаю, что ни один из полученных ответов пока не удовлетворяет. Попробуйте использовать одну из следующих функций:
РЕДАКТИРОВАТЬ : Поскольку я получаю несколько лайков в этой старой ветке, я также хочу поделиться обновленным решением (в основном, объединяя две мои предыдущие функции и автоматически решая, является ли это графиком bar или hbar):
Теперь вы можете использовать их для обычных гистограмм:
или для горизонтальных полос:
источник
Для людей панд:
Вот и все. В качестве альтернативы для тех, кто предпочитает
apply
повторение цикла с помощью enumerate:Кроме того,
ax.patches
вы получите бары, которые вы получитеax.bar(...)
. Если вы хотите применить функции @SaturnFromTitan или чужие техники.источник
[ax.text(i, v, '{:.2f}%'.format(100*v)) for i, v in enumerate(s)];
for p in ax.patches: ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
Мне также нужны были ярлыки полос, обратите внимание, что моя ось Y имеет увеличенный вид с использованием ограничений по оси Y. Расчеты по умолчанию для размещения меток поверх панели все еще работают с использованием высоты (use_global_coordinate = False в примере). Но я хотел показать, что метки можно размещать и внизу графика в увеличенном виде, используя глобальные координаты в matplotlib 3.0.2 . Надеюсь, это кому-то поможет.
источник
Я пытался сделать это с помощью составных столбцов графика. Код, который работал у меня, был.
источник
Проверьте эту ссылку Галерея Matplotlib Вот как я использовал фрагмент кода autolabel.
источник