2013-08-23 6 views
6

Я пытаюсь создать гистограмму, которая покажет количество оценок за значение в дискретных рейтингах звезд (1-5). Должно быть значение бара на значение, а по оси x единственными числами, которые должны быть показаны, являются [1,2,3,4,5] под каждой панелью (в центре).Как создать гистограмму/гистограмму с полосой на дискретное значение?

Я попытался установить количество бункеров до 5 или их диапазона, чтобы быть от 0-7, но это создает полосы, которые охватывают по значениям (как в изображении, подаваемое)

enter image description here

Это код, который я пытался (панды и NumPy):

df.stars.hist() 

и

hist, bins = np.histogram(x1, bins=5) 
ax.bar(bins[:-1], hist.astype(np.float32)/hist.sum(), width=(bins[1]-bins[0]), color="blue") 

ответ

8

Вы можете использовать plot(kind='bar') метод:

stars = Series(randint(1, 6, size=100)) 
vc = stars.value_counts().sort_index() 
ax = vc.plot(kind='bar') 
fig = ax.get_figure() 
fig.autofmt_xdate() 

получить:

enter image description here

EDIT # 1: Чтобы показать их пропорции просто разделить на sum

vc /= float(vc.sum()) 
assert vc.sum() == 1 

:

enter image description here

EDIT # 2: Для того, чтобы показать им, как проценты делят на сумму, как указано выше, и использовать формат спецификации мини-язык для форматирования оси у клеща этикетки

new_labels = ['{0:.0%}'.format(float(x.get_text())) for x in ax.get_yticklabels()] 
ax.set_yticklabels(new_labels) 

, чтобы получить :

enter image description here

+0

Спасибо, это здорово! Фактически я показываю сумму в процентах от общих данных, как бы вы это сделали с использованием предлагаемого подхода? – d1337

Смежные вопросы