[PYTHON] Stellen Sie die vertikale Achse des Histogramms mit matplotlib auf relative Häufigkeit (Gesamthöhe der Spalten = 1) und relative Frequenzdichte (Gesamtfläche des Histogramms = 1) ein

Was ist in diesem Artikel zu tun?

In matplotlib die vertikale Achse des Histogramms

--Frequenz (Matplotlib-Standardeinstellung) --Relative Frequenz

Und zeichne.

Referenzseite (Danke)

Die Norm von matplotlib.hist hat sich geändert Verhalten von matplotlib: histgram normiert Statistik ② Lerne mit Python die Wahrscheinlichkeitsdichtefunktion (Normalverteilung, Standardnormalverteilung)!

Vereinbarung von Begriffen

Die Formel lautet

Es scheint. Als ich mit dem folgenden Python-Code experimentiert habe, scheint es, dass die vertikale Achse die relative Frequenzdichte ist, wenn in der Hist-Funktion "Dichte = Wahr" angegeben ist. Die hist-Funktion hat auch eine normierte Option (veraltet), aber es scheint, dass die Dichteoption diesen Fehler beseitigt.

Quellcode (Jupyter Notebook) und Zeichnungsergebnis

Zeichnen Sie drei Histogramme. Die Anzahl der Daten beträgt 10.000 und es handelt sich um eine normale Zufallszahl mit einem Durchschnittswert von 50 und einer Standardabweichung von 10.


#%% md

#%%

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt


#%%

#Datenerstellung
μ = 50
σ = 10
data = [ np.random.normal(μ, σ) for i in range(10000) ]


#%%

#Anzahl der Klassen
num_bins = 20

#Klassenbreite
bin_width = (max(data) - min(data)) / num_bins
print(f"Klassenbreite=Über{bin_width}")

#Diagrammzeichnung
fig = plt.figure(figsize=(8, 24))

# (1)Ein Histogramm mit der vertikalen Achse als Frequenz
ax1 = fig.add_subplot(311)
ax1.title.set_text("(1) frequency")
ax1.grid(True)
ax1.hist(data, bins=num_bins)

# (2)Ein Histogramm mit der vertikalen Achse als relativer Frequenz
ax2 = fig.add_subplot(312)
ax2.title.set_text("(2) relative frequency")
ax2.grid(True)
ax2.set_xlim(ax1.get_xlim())
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights)

# (3)Ein Histogramm mit der vertikalen Achse als relativer Frequenzdichte(Blau)& Wahrscheinlichkeitsdichtefunktion der Normalverteilung(rot)
ax3 = fig.add_subplot(313)
ax3.title.set_text("(3) density")
ax3.grid(True)
ax3.set_xlim(ax1.get_xlim())
ax3.hist(data, bins=num_bins, density=True, color="blue", alpha=0.5)

x = np.arange(0, 100, 1)
y = norm.pdf(x, μ, σ)
ax3.fill_between(x, y, color="red", alpha=0.5)
ax3.plot(x, y, 'k', linewidth=3, color="red", alpha=0.5)

Als ich den Code ausführte, stand dort "Klassenbreite = ungefähr 3.718313197105561" und das folgende Histogramm wurde gezeichnet. Jedes der drei Histogramme hat (1) vertikale Achse = Frequenz, (2) vertikale Achse = relative Frequenz und (3) vertikale Achse = relative Frequenzdichte Histogramm (blau) und Normalverteilungswahrscheinlichkeitsdichtefunktion (rot) überlagert. Wird angezeigt. Da sich das Histogramm von "Dichte = Wahr" und die Wahrscheinlichkeitsdichtefunktion überlappen, scheint es, dass die Fläche des gesamten Histogramms 1 wird, wenn "Dichte = Wahr" eingestellt ist.

1.png

Überprüfen Sie anhand der Berechnungsformel grob, ob die vertikale Achse die relative Frequenzdichte mit "Dichte = Wahr" ist.

Verwenden Sie zur Validierung die höchste Spalte des Histogramms.

Relative Frequenz

Die höchste Spalte in (2) ist ein Wert zwischen 0,14 und 0,15.

Klassenbreite

Als ich den Code ausführte, stand dort ungefähr 3.7.

Relative Frequenzdichte

Relative Häufigkeit / Klassenbreite = 0,145 / 3,7 ≤ 0,039 Es sieht so aus, als würde es der höchsten Säule in (3) entsprechen. (Ende der Überprüfung)

Stellen Sie sicher, dass die Gesamthöhe der Säulen mit dem relativen Frequenzhistogramm 1,0 beträgt

Es ist schwierig, das obige Histogramm zu lesen und zu addieren. Setzen Sie daher die Klassennummer (Variable num_bins) des Python-Codes auf 1 und führen Sie sie erneut aus.

2.png

Die Höhe der einzigen Säule in (2) beträgt jetzt 1,0. Da wir 10000 Daten verwendet haben, beträgt die Höhe der einzigen Säule in (1) ebenfalls 10000. Das Histogramm "Dichte = wahr" (blau) in (3) sieht ebenfalls genauso aus wie der Bereich der Wahrscheinlichkeitsdichtefunktion (rot) (Bereich = 1). (Ende der Überprüfung)

Recommended Posts

Stellen Sie die vertikale Achse des Histogramms mit matplotlib auf relative Häufigkeit (Gesamthöhe der Spalten = 1) und relative Frequenzdichte (Gesamtfläche des Histogramms = 1) ein
Bei matplotlib ist die vertikale Achse auf der linken Seite des Histogramms die Frequenz und die vertikale Achse auf der rechten Seite die relative Frequenz (möglicherweise ein böser Weg).
Stellen Sie die Behälterbreite mit dem Histogramm von Matplotlib und Seaborn klar und ordentlich ein
Fügen Sie mit Matplotlib Informationen am unteren Rand der Abbildung hinzu
Vorsichtsmaßnahmen bei der Überlagerung der Wahrscheinlichkeitsdichtefunktion und des Histogramms in matplotlib
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows