In matplotlib die vertikale Achse des Histogramms
--Frequenz (Matplotlib-Standardeinstellung) --Relative Frequenz
Und zeichne.
Die Norm von matplotlib.hist hat sich geändert Verhalten von matplotlib: histgram normiert Statistik ② Lerne mit Python die Wahrscheinlichkeitsdichtefunktion (Normalverteilung, Standardnormalverteilung)!
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.
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.
Verwenden Sie zur Validierung die höchste Spalte des Histogramms.
Die höchste Spalte in (2) ist ein Wert zwischen 0,14 und 0,15.
Als ich den Code ausführte, stand dort ungefähr 3.7.
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)
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.
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)