2013-08-23 14 views
6

Ayrık bir yıldız derecelendirmesinde (1-5) değer başına düşen değer miktarını gösteren bir histogram oluşturmaya çalışıyorum. Değer başına bir çubuk olmalı ve x ekseninde, gösterilecek tek numaralar her çubuğun altında (ortalanmış) [1,2,3,4,5]. Çubuk grafik/histogram, ayrık değer başına çubukla nasıl oluşturulur?

ben 0-7 arasında olması 5 veya onların aralığına kutuları miktarını ayarlayarak çalıştı, ama o

enter image description here

budur (verilen görüntüde gibi) değerler arasında yayılan çubukları oluşturur kod denedim (pandalar ve numpy):

df.stars.hist() 

ve

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

cevap

8
Sen plot(kind='bar') yöntemi kullanabilirsiniz

:

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() 

almak için:

enter image description here

DÜZENLEME # 1: oranlar sadece sum

vc /= float(vc.sum()) 
assert vc.sum() == 1 
bölün olarak
göstermek için

almak için:

enter image description here

DÜZENLEME # 2: y ekseni kene

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

almak için etiketleri biçimlendirmek için yukarıda ve format Spec mini dil kullanmak olarak yüzdeler toplamı bölün olarak göstermek için :

enter image description here

+0

Teşekkürler, bu harika! Tutarı genel olarak toplam verilerden yüzde olarak gösteriyorum, önerilen yaklaşımı kullanarak bunu nasıl yaparsınız? – d1337

İlgili konular