У меня есть гистограмма, и я хочу, чтобы в каждом столбце отображался текст, как я могу это сделать?
Как отобразить текст над столбцами на гистограмме в matplotlib?
Ответы (1)
Я считаю, что это укажет вам правильное направление:
http://matplotlib.sourceforge.net/examples/pylab_examples/barchart_demo.html .
Часть, которая вас больше всего интересует, это:
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%d'%int(height),
ha='center', va='bottom')
Размещение текста определяется функцией высоты или высотой столбца, а число, помещаемое в начало каждого столбца, записывается как: '%d' %int(height). Поэтому все, что вам нужно сделать, это создать массив строк с именем «имя», который вы хотите разместить в верхней части столбцов, и выполнить итерацию. Обязательно измените формат на строку (%s), а не на двойное число.
def autolabel(rects):
# attach some text labels
for ii,rect in enumerate(rects):
height = rect.get_height()
plt.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%s'% (name[ii]),
ha='center', va='bottom')
autolabel(rects1)
Это должно сделать это!
person
cosmosis
schedule
14.09.2011
Я пытался понять это, но я хочу отобразить строку, и это меня беспокоит. Я запутался с ней, но я не могу изменить ее в соответствии со своим случаем.
- person IordanouGiannis; 15.09.2011
@cosmosis
1.02*height
на самом деле не работает, если значения y сильно различаются (например, минимум 0 и максимум 1300). Какие-либо предложения?
- person tobip; 01.07.2014
@ta.ft. Если использование процентиля не работает, попробуйте добавить простое число, например
height+20
. Другим решением было бы настроить цикл if внутри цикла for, где вы указываете height1 = height * 1.02
, если высота ‹ 300, и height1 = height + 20
, если высота > 300. Затем в plt.text замените вызов height
на height1
.
- person cosmosis; 01.07.2014
@cosmosis Это хороший обходной путь, но он все же не гарантирует, что расстояние между полосой и текстом всегда будет одинаковым.
- person tobip; 02.07.2014
@ ta.ft Тогда я предлагаю вам просто использовать «высота + 20» или что-то подобное, если вы хотите гарантировать, что расстояние всегда будет одинаковым.
- person cosmosis; 02.07.2014
Итак, вы передаете
plt
, и все же в функции у вас есть предопределенный массив меток? Разве это не должно принимать два аргумента?
- person Dhruv Ghulati; 06.09.2016
Я также получаю
height = plt.get_height() AttributeError: 'module' object has no attribute 'get_height'
- person Dhruv Ghulati; 06.09.2016
@DhruvGhulati Это не проходит в графике, он создает текст над графиком гистограммы на определенной высоте, где
plt
является сокращением для import matplotlib.pyplot as plt
. Метки в нижней функции не нужно считывать, потому что они перечисляются вместе с гистограммой rects
и, следовательно, их не нужно считывать.
- person cosmosis; 06.09.2016