2013-08-23 13 views
6

Ich versuche ein Histogramm zu erstellen, das die Anzahl der Bewertungen pro Wert in einer diskreten Sternbewertung (1-5) anzeigt. Es sollte einen Balken pro Wert geben, und in der x-Achse sind die einzigen Zahlen [1,2,3,4,5] unterhalb jedes Balkens (mittig).Wie erstellt man ein Balkendiagramm/Histogramm mit Balken pro diskreten Wert?

ich versuchte, die Menge von Bins bis 5 oder dessen Bereich von 0-7 zu sein Einstellung, aber das erzeugt Balken, die sie über Werte (wie im Bild geliefert)

enter image description here

Dies ist die Spanne Code ich habe versucht (Pandas und numpy):

df.stars.hist() 

und

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

Antwort

8

Sie die plot(kind='bar') Methode verwenden können:

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

zu erhalten:

enter image description here

EDIT # 1: ihnen zu zeigen, wie Proportionen durch die sum

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

zu erhalten:

enter image description here

EDIT # 2: ihnen zu zeigen, als Prozentsatz durch die Summe teilen, wie oben und die Format-Spezifikation Mini-Sprache verwenden, um die Zecke Etiketten

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

zu erhalten :

enter image description here

+0

Danke, das ist großartig! Ich zeige den Betrag in Prozent von den Gesamtdaten, wie würden Sie das mit dem vorgeschlagenen Ansatz machen? – d1337

Verwandte Themen