Ich versuche, mit der matplotlib.hist()
Funktion ein Histogramm zu zeichnen , bin mir aber nicht sicher, wie ich das machen soll.
Ich habe eine Liste
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]
und eine Liste von Namen (Strings).
Wie mache ich die Wahrscheinlichkeit als meinen y-Wert für jeden Balken und Namen als x-Werte?
python
matplotlib
visualization
data-visualization
DataVizGuys
quelle
quelle
Wenn Sie matplotlib noch nicht installiert haben, versuchen Sie einfach den Befehl.
Bibliotheksimport
Die Histogrammdaten:
Histogramm anzeigen
Und die Ausgabe ist wie folgt:
quelle
Obwohl die Frage zu fordern scheint, ein Histogramm mit zu zeichnen
matplotlib.hist()
Funktion , kann dies wohl nicht unter Verwendung des gleichen Teils der Frage durchgeführt werden, der verlangt, die gegebenen Wahrscheinlichkeiten als y-Werte von Balken und gegebenen Namen (Zeichenketten) als zu verwenden x-Werte.Ich gehe von einer Beispielliste mit Namen aus, die den angegebenen Wahrscheinlichkeiten für das Zeichnen des Diagramms entsprechen. Ein einfaches Balkendiagramm dient hier dem Zweck für das gegebene Problem. Der folgende Code kann verwendet werden:
quelle
Dies ist eine sehr runde Methode. Wenn Sie jedoch ein Histogramm erstellen möchten, in dem Sie die Bin-Werte bereits kennen, aber nicht über die Quelldaten verfügen, können Sie mit dieser
np.random.randint
Funktion die richtige Anzahl von Werten innerhalb des jeweiligen Bereichs generieren bin, damit die Hist-Funktion grafisch dargestellt wird, zum Beispiel:Bei Beschriftungen können Sie x Ticks mit Bins ausrichten, um Folgendes zu erhalten:
quelle
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
mit den Ergebnissen
matplotlib kommt in diesem Fall standardmäßig mit den folgenden Histogrammwerten an
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.
Oder zum Beispiel für 3 Behälter (mein Urteil erfordert 13 Beobachtungen) würde man dieses Histogramm erhalten
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).
quelle