[PYTHON] Réglez l'axe vertical de l'histogramme sur la fréquence relative (hauteur totale des colonnes = 1) et la densité de fréquence relative (surface totale de l'histogramme = 1) avec matplotlib

Que faire dans cet article

Dans matplotlib, l'axe vertical de l'histogramme

--Frequency (par défaut de matplotlib) --Fréquence relative

Et dessiner.

Page de référence (merci)

La norme de matplotlib.hist a changé comportement de matplotlib: histgram normé Statistiques ② Utilisez python pour apprendre la fonction de densité de probabilité (distribution normale, distribution normale standard)!

Arrangement des termes

La formule est

--Densité de fréquence = fréquence / largeur de classe

Il semble. Lorsque j'ai expérimenté le code Python ci-dessous, il semble que l'axe vertical soit la densité de fréquence relative lorsque "densité = True" est spécifié dans la fonction hist. La fonction hist a également une option normée (obsolète), mais il semble que l'option densité supprime ce bogue.

Code source (Jupyter Notebook) et résultat du dessin

Dessinez trois histogrammes. Le nombre de données est de 10000 et il s'agit d'un nombre aléatoire normal avec une valeur moyenne de 50 et un écart type de 10.


#%% md

#%%

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


#%%

#Création de données
μ = 50
σ = 10
data = [ np.random.normal(μ, σ) for i in range(10000) ]


#%%

#Nombre de cours
num_bins = 20

#Largeur de classe
bin_width = (max(data) - min(data)) / num_bins
print(f"Largeur de classe=sur{bin_width}")

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

# (1)Un histogramme avec l'axe vertical comme fréquence
ax1 = fig.add_subplot(311)
ax1.title.set_text("(1) frequency")
ax1.grid(True)
ax1.hist(data, bins=num_bins)

# (2)Un histogramme avec l'axe vertical comme fréquence relative
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)Un histogramme avec l'axe vertical comme densité de fréquence relative(Bleu)& Fonction de densité de probabilité de la distribution normale(rouge)
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)

Quand j'ai exécuté le code, il a dit "largeur de classe = environ 3,718313197105561" et l'histogramme suivant a été dessiné. Chacun des trois histogrammes a (1) axe vertical = fréquence, (2) axe vertical = fréquence relative et (3) axe vertical = histogramme de densité de fréquence relative (bleu) et fonction de densité de probabilité de distribution normale (rouge) superposés. Est affiché. Puisque l'histogramme de "densité = Vrai" et la fonction de densité de probabilité se chevauchent, il semble que la zone de l'histogramme entier devienne 1 lorsque "densité = Vrai" est défini.

1.png

Vérifiez grossièrement à partir de la formule de calcul si l'axe vertical est la densité de fréquence relative avec "densité = Vrai"

Utilisez la colonne la plus élevée de l'histogramme pour la validation.

Fréquence relative

La colonne la plus élevée de (2) est une valeur comprise entre 0,14 et 0,15.

Largeur de classe

Quand j'ai exécuté le code, il a dit environ 3.7.

Densité de fréquence relative

Fréquence relative / largeur de classe = 0,145 / 3,7 ≒ 0,039 Il semble correspondre au pilier le plus élevé de (3). (Fin de la vérification)

Vérifiez que la hauteur totale des piliers est de 1,0 avec l'histogramme de fréquence relative

Il est difficile de lire l'histogramme ci-dessus et d'additionner, alors définissez le numéro de classe (variable num_bins) du code Python sur 1 et réexécutez-le.

2.png

La hauteur du seul pilier de (2) est désormais de 1,0. De plus, comme nous avons utilisé 10000 données, la hauteur du seul pilier de (1) est également de 10000. L'histogramme "densité = Vrai" (bleu) dans (3) a également la même apparence que la zone de la fonction de densité de probabilité (rouge) (zone = 1). (Fin de la vérification)

Recommended Posts

Réglez l'axe vertical de l'histogramme sur la fréquence relative (hauteur totale des colonnes = 1) et la densité de fréquence relative (surface totale de l'histogramme = 1) avec matplotlib
Avec matplotlib, l'axe vertical sur le côté gauche de l'histogramme est la fréquence, et l'axe vertical sur le côté droit est la fréquence relative (peut-être une mauvaise manière)
Ajustez la largeur du bac de manière nette et précise avec l'histogramme de matplotlib et seaborn
Ajoutez des informations au bas de la figure avec Matplotlib
Précautions lors de la superposition de la fonction de densité de probabilité et de l'histogramme dans matplotlib
Pour améliorer la réutilisabilité et la maintenabilité des flux de travail créés avec Luigi