2013-07-03 9 views
7

bei diesem Beispiel einen Blick:Hist in matplotlib: Bins sind nicht zentriert und Proportionen nicht korrekt auf der Achse

import matplotlib.pyplot as plt 
l = [3,3,3,2,1,4,4,5,5,5,5,5,5,5,5,5] 
plt.hist(l,normed=True) 
plt.show() 

Die Ausgabe als Bild geschrieben wird. Ich habe zwei Fragen:

a) Warum sind nur die 4 und 5 Fächer um seinen Wert zentriert? Sollten das nicht auch die anderen sein? Gibt es einen Trick, um sie zu zentrieren?

b) Warum werden die Bins nicht proportionalisiert? Ich möchte, dass die y-Werte aller Bins zu eins addiert werden.

Beachten Sie, dass mein reales Beispiel viel mehr Werte in der Liste enthält, aber sie sind alle diskret.

enter image description here

Antwort

10

Sie sollten die Schlüsselwort-Argumente der plt.hist Funktion anpassen. Es gibt viele von ihnen und die documentation kann Ihnen helfen, viele dieser Fragen zu beantworten.

a.) Sie können die Schlüsselwörter bins=range(1,7) und align=left übergeben. Wenn Sie das Schlüsselwort bins auf eine Sequenz setzen, werden die Grenzen der einzelnen Klassen angezeigt. Zum Beispiel [1,2], [2,3], [3,4], ..., [5, 6].

b.) Überprüfen Sie Ihre Fachbreiten (rwidth!=1). Von der matplotlib.pyplot.hist Dokumentation:

True, wird das erste Element des Rück Tupel werden die Zählungen normalisierten eine Wahrscheinlichkeitsdichte zu bilden, das heißt, n/(len (x) * dbin). In einer Wahrscheinlichkeitsdichte von sollte das Integral des Histogramms 1 sein; Sie können, dass mit trapezförmigem Integration der Wahrscheinlichkeit Dichtefunktion überprüfen:

Dies bedeutet, dass die Fläche unter Ihrem Bins summiert zu einem, sondern weil die Behälterbreiten kleiner als 1, die Höhen normalisieren erhalten so dass die Höhen nicht zu 1 addieren. Wenn Sie rwidth=1 anpassen, erhalten Sie eine gut aussehende Diagramm:

plt.hist(l, bins=range(1,7), align='left', rwidth=1, normed=True) 
Verwandte Themen