2013-08-23 14 views
6

Próbuję utworzyć histogram, który pokaże ilość ocen na wartość w dyskretnej ocenie gwiazdek (1-5). Powinien istnieć słupek na wartość, a na osi x jedyne wyświetlane liczby to [1,2,3,4,5] pod każdym paskiem (wyśrodkowane).Jak utworzyć wykres słupkowy/histogram z kreską na dyskretną wartość?

że próbowano ustawienie ilości pojemników do 5 lub jego zakresu się od 0-7, lecz tworzy w poprzek prętów, które obejmują wartości (jak w obrazie dostarczanym)

enter image description here

To Kod próbowałem (pandy i numpy):

df.stars.hist() 

i

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

Odpowiedz

8

Można użyć metody 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() 

dostać:

enter image description here

EDIT # 1:, aby pokazać im jak proporcje prostu podzielić przez sum

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

, aby uzyskać:

enter image description here

EDIT # 2:, aby pokazać im jak procenty podzielić przez sumę jak wyżej i użyć formatu niespełniającego mini języka formatowania kleszcz oś y etykiet

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

dostać :

enter image description here

+0

Dzięki, to świetnie! Rzeczywiście pokazuję kwotę w procentach z ogólnych danych, w jaki sposób zrobiłbyś to za pomocą proponowanego podejścia? – d1337

Powiązane problemy