Ich möchte mit matplotlib ein normalisiertes Histogramm aus einem Vektor zeichnen. Ich habe folgendes versucht:
plt.hist(myarray, normed=True)
ebenso gut wie:
plt.hist(myarray, normed=1)
Aber keine der beiden Optionen erzeugt eine y-Achse von [0, 1], sodass sich die Balkenhöhen des Histogramms zu 1 summieren. Ich möchte ein solches Histogramm erstellen - wie kann ich das tun?
Antworten:
Es wäre hilfreicher, wenn Sie ein vollständigeres (oder in diesem Fall nicht funktionierendes) Beispiel vorlegen würden.
Ich habe folgendes versucht:
Dies erzeugt in der Tat ein Balkendiagramm-Histogramm mit einer y-Achse, die von ausgeht
[0,1]
.Ferner denke ich gemäß der
hist
Dokumentation (dhax.hist?
vonipython
), dass die Summe auch in Ordnung ist:Probieren Sie es nach den obigen Befehlen aus:
Ich erhalte einen Rückgabewert von
1.0
wie erwartet. Denken Sie daran, dassnormed=True
dies nicht bedeutet, dass die Summe des Werts an jedem Balken Eins ist, sondern dass das Integral über den Balken Einheit ist. In meinem Fallnp.sum(n)
ca. zurückgekehrt7.2767
.quelle
Wenn Sie möchten, dass die Summe aller Balken gleich eins ist, gewichten Sie jeden Behälter mit der Gesamtzahl der Werte:
Hoffe das hilft, obwohl der Thread ziemlich alt ist ...
Hinweis für Python 2.x: Fügen Sie Casting
float()
für einen der Operatoren der Division hinzu, da Sie sonst aufgrund der Ganzzahldivision Nullen erhalten würdenquelle
array_like
eher als ein numpy Array , das Sie Guss benötigenlen(myarray)
zufloat
.Ich weiß, dass diese Antwort zu spät ist, wenn man bedenkt, dass die Frage auf das Jahr 2010 datiert ist, aber ich bin auf diese Frage gestoßen, da ich selbst mit einem ähnlichen Problem konfrontiert war. Wie bereits in der Antwort angegeben, bedeutet normed = True, dass die Gesamtfläche unter dem Histogramm gleich 1 ist, die Summe der Höhen jedoch nicht gleich 1. Ich wollte jedoch zur Vereinfachung der physikalischen Interpretation eines Histogramms eine erstellen mit einer Summe von Höhen gleich 1.
Ich habe in der folgenden Frage einen Hinweis gefunden - Python: Histogramm mit einem Bereich, der auf etwas anderes als 1 normalisiert ist
Ich konnte jedoch keine Möglichkeit finden, Balken so zu gestalten, dass sie das Merkmal histtype = "step" hist () imitieren. Dies lenkte mich zu: Matplotlib - Stufen-Histogramm mit bereits gruppierten Daten
Wenn die Community dies für akzeptabel hält, möchte ich eine Lösung vorschlagen, die Ideen aus den beiden oben genannten Beiträgen zusammenfasst.
Dies hat bei mir wunderbar funktioniert, obwohl ich in einigen Fällen festgestellt habe, dass der am weitesten links liegende "Balken" oder der am weitesten rechts stehende "Balken" des Histogramms nicht durch Berühren des tiefsten Punkts der Y-Achse geschlossen wird. In einem solchen Fall wurde durch Hinzufügen eines Elements 0 am Betteln oder am Ende von y das erforderliche Ergebnis erzielt.
Ich dachte nur, ich würde meine Erfahrungen teilen. Danke dir.
quelle
Hier ist eine weitere einfache Lösung mit
np.histogram()
Methode.Sie können in der Tat überprüfen, ob die Gesamtsumme bis zu 1 beträgt:
quelle