[PYTHON] Précautions lors de la superposition de la fonction de densité de probabilité et de l'histogramme dans matplotlib

Quand je voulais superposer l'histogramme et la fonction de densité de probabilité, je ne pouvais pas les superposer proprement au début, donc je laisserai une note de la solution à ce moment-là.

Cause

Les nombres aléatoires générés par numpy.random ont une zone d'histogramme supérieure à 1 en fonction du nombre de générations.

Solution

-Histogramme normalisé --Aligner la zone de la fonction de densité de probabilité avec l'histogramme

Standardiser l'histogramme

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
n = 2000 #Le nombre de données

data = np.random.randn(n)
plt.hist(data, range=(-3, 3), bins=60, alpha=0.5, density=True)
#Largeur de classe 0.1 Nombre total de données 2000,Un histogramme avec l'axe vertical comme densité de fréquence relative
x = np.linspace(-3, 3, 61)
#0.Générer une séquence de nombres par incréments de 1
plt.plot(x, norm.pdf(x), c='r')

La zone a été définie sur 1 en définissant l'axe vertical sur la densité de fréquence relative au lieu de la fréquence.


Largeur de classe w,Classe n,Fréquence D_Zone d'origine S comme n\\

S=\sum_{n}D_nw\\

Fréquence relative\\D_n^R=\frac{D_n}{\sum_{n}D_n}\\
Fréquence de densité relative\\

\begin{aligned}
D_n^{'}&=\frac{D_n^R}{w}\\
&={\frac{D_n}{\sum_{n}D_n}} \times {\frac{1}{w}}\\
&=\frac{D_n}{S}\\
\end{aligned}\\
Zone S de l'histogramme utilisant la fréquence de densité relative^{'}\\
\begin{aligned}

S^{'}&=D_n^{'}\\
&=\frac{\sum_{n}D_n}{S}\\
&=\frac{S}{S}\\
&=1
\end{aligned}

Aligner la zone de la fonction de densité de probabilité avec l'histogramme

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
n = 2000 #Le nombre de données

data = np.random.randn(n)
plt.hist(data, range=(-3, 3), bins=60, alpha=0.5)
#Largeur de classe 0.1 Nombre total de données 2000,Un histogramme avec l'axe vertical comme densité de fréquence relative
x = np.linspace(-3, 3, 61)
#0.Générer une séquence de nombres par incréments de 1
plt.plot(x, n*0.1*norm.pdf(x), c='r')
#0.1 est la largeur de la classe

La zone a été ajustée en multipliant la fonction de densité de probabilité par la zone de l'histogramme.

Fonction de densité de probabilité f(x),Nombre total de données dans l'histogramme n,Soit la largeur de la classe w.\\
f(x)Satisfait l'équation suivante\\
\begin{aligned}
\int f(x) dx = 1
\end{aligned}\\
N des deux côtés\En multipliant par les fois w, l'aire de l'histogramme n\Peut être des fois w.\\
Par conséquent, la fonction de densité de probabilité f après conversion^{'}(x)Est\\
f^{'}(x)=n\times w \times f(x)





Recommended Posts

Précautions lors de la superposition de la fonction de densité de probabilité et de l'histogramme dans matplotlib
Comment unifier la largeur du bac lors de l'affichage de plusieurs histogrammes les uns sur les autres (matplotlib)
Text mining: distribution de densité de probabilité sur hypersphère et clustering de texte avec KMeans
Battre la fonction de densité de probabilité de la distribution normale
Lorsque l'axe et l'étiquette se chevauchent dans matplotlib
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
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)
Exercice de dessin de diagramme PRML 1.4 Transformation non linéaire de la fonction de densité de probabilité
Rendre la fonction de dessin de polices japonaises dans OpenCV en général
Une histoire que j'ai eu du mal à afficher des graphiques les uns sur les autres avec matplotlib
Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Probabilité des prix les plus élevés et les plus bas des louveteaux à Atsumori
Précautions lors de l'utilisation de la fonction urllib.parse.quote
Ajustez la largeur du bac de manière nette et précise avec l'histogramme de matplotlib et seaborn
Rechercher le nom et les données d'une variable libre dans un objet fonction
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
[Python] Précautions lors de la recherche des valeurs maximum et minimum avec un tableau numpy avec un petit nombre d'éléments
Précautions lors du décapage d'une fonction en python
Séparation de la conception et des données dans matplotlib
[Python] Précautions lors de l'acquisition de données en grattant et en les mettant dans la liste
[Linux] Différence d'informations temporelles en fonction de l'ID d'horloge de la fonction clock_gettime ()
Définir la limite supérieure du nombre de répétitions de fonctions récursives en Python
Différences de comportement de chaque langage LL lorsque l'index de la liste est ignoré
Erreur survenue dans OpenCV3 et sa solution Précautions lors de l'utilisation d'OpenCV3 sur Mac
Détails des erreurs et contre-mesures survenues dans OpenCv2 lors de l'exécution de l'exemple de programme de reconnaissance d'objets de "Détection d'objets sur les outils"