[PYTHON] 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)

Que faire dans cet article

C'est la suite de cet article → [«Faire l'axe vertical de l'histogramme la fréquence relative (hauteur totale des colonnes = 1) et la densité de fréquence relative (surface totale de l'histogramme = 1) avec matplotlib»](https: // qiita. com / kanedaq / items / 1e7a0e52363224c08980)

Utilisez matplotlib pour créer un histogramme

Et dessiner. Cependant, cela peut être une mauvaise manière.

Page de référence (merci)

[python] Comment dessiner un graphe avec deux axes à gauche et à droite avec matplotlib

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

Le nombre de données est de 7500, et c'est un nombre aléatoire normal avec une valeur moyenne de 50 et un écart type de 10. Tout d'abord, essayez d'exécuter le code Python suivant.


#%%

import numpy as np
import matplotlib.pyplot as plt


#%%

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


#%%

#Nombre de cours
num_bins = 20

#Dessin graphique
fig = plt.figure(figsize=(12, 8))
plt.legend()
plt.xlabel('x', fontsize=18)
plt.title('null', fontsize=18)

# (1)Un histogramme avec l'axe vertical comme fréquence
ax1 = fig.add_subplot(111)
ax1.set_ylabel('frequency', fontsize=18)
ax1.grid(True, color="dimgray")
ax1.set_axisbelow(True)    #Déplacer la grille vers l'arrière
ax1.hist(data, bins=num_bins, rwidth=0.5, align="mid")

# (2)Un histogramme avec l'axe vertical comme fréquence relative
ax2 = ax1.twinx()
ax2.set_ylabel('relative frequency', fontsize=18)
ax2.grid(True, color="lightgrey", linestyle="--")
ax2.set_axisbelow(True)    #Déplacer la grille vers l'arrière
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights, rwidth=0.5, align="right", color="red")

1.png

L'axe vertical = la colonne de fréquence est dessinée dans la couleur par défaut, et l'axe vertical = la colonne de fréquence relative est dessinée en rouge, côte à côte. Les gens confirment que les hauteurs des deux sont identiques </ font> (La raison pour laquelle ils sont diaboliques ...)

Si les hauteurs des colonnes de fréquence et de fréquence relative sont identiques, faites correspondre les couleurs des colonnes. Appelez ax2.hist () sans spécifier "color =" red "".

2.png

La ligne Grille de ax2 est affichée devant le pilier de ax1. Pour rendre cette ligne horizontale invisible, j'ai décidé d'ajouter le code suivant pour écraser le même graphique que ax1.


# (3) (1)Ajustez l'apparence de
ax3 = ax1.twinx()
ax3.set_yticklabels([]) 
ax3.hist(data, bins=num_bins, rwidth=0.5, align="mid")

3.png

Le code complet de la version finale est ci-dessous.


#%%

import numpy as np
import matplotlib.pyplot as plt


#%%

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


#%%

#Nombre de cours
num_bins = 20

#Dessin graphique
fig = plt.figure(figsize=(12, 8))
plt.legend()
plt.xlabel('x', fontsize=18)
plt.title('null', fontsize=18)

# (1)Un histogramme avec l'axe vertical comme fréquence
ax1 = fig.add_subplot(111)
ax1.set_ylabel('frequency', fontsize=18)
ax1.grid(True, color="dimgray")
ax1.set_axisbelow(True)    #Déplacer la grille vers l'arrière
ax1.hist(data, bins=num_bins, rwidth=0.5, align="mid")

# (2)Un histogramme avec l'axe vertical comme fréquence relative
ax2 = ax1.twinx()
ax2.set_ylabel('relative frequency', fontsize=18)
ax2.grid(True, color="lightgrey", linestyle="--")
ax2.set_axisbelow(True)    #Déplacer la grille vers l'arrière
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights, rwidth=0.5, align="right")

# (3) (1)Ajustez l'apparence de
ax3 = ax1.twinx()
ax3.set_yticklabels([]) 
ax3.hist(data, bins=num_bins, rwidth=0.5, align="mid")

Cela ressemble à une mauvaise façon, alors s'il vous plaît laissez-moi savoir s'il existe une approche simple.

Recommended Posts

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)
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
Précautions lors de la superposition de la fonction de densité de probabilité et de l'histogramme dans matplotlib
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
Affichage quadrillé du double tracé (axe vertical gauche et droit) (matplotlib)
Pourquoi mettre une tranche sur le côté gauche dans la formule de substitution
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Lorsque l'axe et l'étiquette se chevauchent dans matplotlib
L'opérateur and de l'expression d'évaluation de Python semble être évalué à partir de l'expression de gauche
[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats
Un mémo pour comprendre visuellement l'axe des pandas.
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Je suis à Singapour en ce moment Une histoire sur la création d'un LineBot et la volonté de faire un travail mémorable
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Exemples et contre-mesures pour "Une valeur tente d'être définie sur une copie d'une tranche d'une trame de données." Avertissement chez les pandas
Comment envoyer des fichiers d'un seul coup en se connectant à un hôte de l'autre côté de la plate-forme avec SCP en plusieurs étapes