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.
[python] Comment dessiner un graphe avec deux axes à gauche et à droite avec matplotlib
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")
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 "".
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")
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