Dies ist eine alte Frage, aber keine der vorherigen Antworten hat das eigentliche Problem angesprochen, dh die Tatsache, dass das Problem bei der Frage selbst liegt.
Erstens, wenn die Wahrscheinlichkeiten bereits berechnet wurden, dh die aggregierten Histogrammdaten auf normalisierte Weise verfügbar sind, sollten sich die Wahrscheinlichkeiten zu 1 addieren. Dies ist offensichtlich nicht der Fall, und das bedeutet, dass hier entweder mit der Terminologie oder mit den Daten etwas nicht stimmt oder wie die Frage gestellt wird.
Zweitens würde die Tatsache, dass die Beschriftungen bereitgestellt werden (und nicht Intervalle), normalerweise bedeuten, dass die Wahrscheinlichkeiten eine kategoriale Antwortvariable sind - und die Verwendung eines Balkendiagramms zum Zeichnen des Histogramms ist am besten (oder ein Hacking der Hist-Methode des Pyplots). Shayan Shafiqs Antwort liefert den Code.
Siehe Problem 1, diese Wahrscheinlichkeiten sind jedoch nicht korrekt und die Verwendung eines Balkendiagramms in diesem Fall als "Histogramm" wäre falsch, da es aus irgendeinem Grund nicht die Geschichte der univariaten Verteilung erzählt (möglicherweise überlappen sich die Klassen und Beobachtungen werden mehrfach gezählt mal?) und ein solches Diagramm sollte in diesem Fall nicht als Histogramm bezeichnet werden.
Das Histogramm ist per Definition eine grafische Darstellung der Verteilung univariater Variablen (siehe https://www.itl.nist.gov/div898/handbook/eda/section3/histogra.htm , https://en.wikipedia.org/wiki) /Histogramm) und wird durch Zeichnen von Balken mit Größen erstellt, die die Anzahl oder Häufigkeit von Beobachtungen in ausgewählten Klassen der interessierenden Variablen darstellen. Wenn die Variable auf einer kontinuierlichen Skala gemessen wird, sind diese Klassen Bins (Intervalle). Ein wichtiger Teil des Histogramm-Erstellungsverfahrens besteht darin, zu entscheiden, wie die Kategorien von Antworten für eine kategoriale Variable gruppiert (oder ohne Gruppierung beibehalten) werden sollen oder wie der Bereich möglicher Werte in Intervalle aufgeteilt werden soll (wo die Bin-Grenzen gesetzt werden sollen), um fortlaufend zu sein Typ Variable. Alle Beobachtungen sollten dargestellt werden, und jede nur einmal in der Handlung. Dies bedeutet, dass die Summe der Balkengrößen gleich der Gesamtzahl der Beobachtungen sein sollte (oder deren Flächen bei variablen Breiten, was ein weniger verbreiteter Ansatz ist). Wenn das Histogramm normalisiert ist, müssen sich alle Wahrscheinlichkeiten zu 1 addieren.
Wenn die Daten selbst eine Liste von "Wahrscheinlichkeiten" als Antwort sind, dh die Beobachtungen Wahrscheinlichkeitswerte (von etwas) für jedes Untersuchungsobjekt sind, ist die beste Antwort einfach plt.hist(probability)
mit einer Binning-Option, und die Verwendung von bereits verfügbaren x-Labels ist verdächtig.
Dann sollte das Balkendiagramm nicht als Histogramm verwendet werden, sondern einfach
import matplotlib.pyplot as plt
probability = [0.3602150537634409, 0.42028985507246375,
0.373117033603708, 0.36813186813186816, 0.32517482517482516,
0.4175257731958763, 0.41025641025641024, 0.39408866995073893,
0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327,
0.35398230088495575]
plt.hist(probability)
plt.show()
mit den Ergebnissen
matplotlib kommt in diesem Fall standardmäßig mit den folgenden Histogrammwerten an
(array([1., 1., 1., 1., 1., 2., 0., 2., 0., 4.]),
array([0.31308411, 0.32380469, 0.33452526, 0.34524584, 0.35596641,
0.36668698, 0.37740756, 0.38812813, 0.39884871, 0.40956928,
0.42028986]),
<a list of 10 Patch objects>)
Das Ergebnis ist ein Tupel von Arrays. Das erste Array enthält Beobachtungszählungen, dh was auf der y-Achse des Diagramms angezeigt wird (sie addieren sich zu 13, Gesamtzahl der Beobachtungen), und das zweite Array sind die Intervallgrenzen für x -Achse.
Man kann überprüfen, ob sie gleich weit voneinander entfernt sind.
x = plt.hist(probability)[1]
for left, right in zip(x[:-1], x[1:]):
print(left, right, right-left)
Oder zum Beispiel für 3 Behälter (mein Urteil erfordert 13 Beobachtungen) würde man dieses Histogramm erhalten
plt.hist(probability, bins=3)
mit den Plotdaten "hinter den Gittern"
Der Autor der Frage muss klären, was die "Wahrscheinlichkeits" -Liste der Werte bedeutet - ist die "Wahrscheinlichkeit" nur ein Name der Antwortvariablen (warum gibt es dann x-Labels, die für das Histogramm bereit sind, macht es keinen Sinn ), oder sind die Listenwerte die aus den Daten berechneten Wahrscheinlichkeiten (dann macht die Tatsache, dass sie sich nicht zu 1 addieren, keinen Sinn).