2013-08-23 12 views
6

Sto provando a creare un istogramma che mostrerà la quantità di valutazioni per valore in una valutazione discreta a stelle (1-5). Ci dovrebbe essere una barra per valore, e nell'asse x gli unici numeri da mostrare sono [1,2,3,4,5] sotto ogni barra (centrato).Come creare un grafico a barre/istogramma con barra per valore discreto?

Ho provato a fissare la quantità di bidoni per 5 o loro gamma di essere da 0-7, ma che crea barre che si estendono attraverso i valori (come nell'immagine in dotazione)

enter image description here

Questo è il codice che ho provato (panda e NumPy):

df.stars.hist() 

e

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

risposta

8

È possibile utilizzare il metodo 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() 

per ottenere:

enter image description here

EDIT # 1: per mostrare loro come proporzioni basta dividere per il sum

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

per ottenere:

enter image description here

EDIT # 2: per mostrare loro come percentuali dividono dalla somma di cui sopra e utilizzare il mini-language formato spec per formattare il segno di spunta asse y etichette

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

per ottenere :

enter image description here

+0

Grazie, che è grande! In realtà sto mostrando l'importo come percentuale dai dati complessivi, come faresti utilizzando l'approccio proposto? – d1337

Problemi correlati