Utilisez hist pour écrire un histogramme avec matplotlib. Quelques exemples sont présentés ci-dessous.
Spécifiez comme hist (données, bins = nombre de bins). Pour le titre et l'étiquette, utilisez set_title, set_xlabel et set_ylabel comme d'habitude.
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(x, bins=50)
ax.set_title('first histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
fig.show()
Un exemple dans lequel le nombre de bacs est de 10 (bacs = 10).
Si normed = True, l'histogramme est normalisé. À ce moment, la fréquence totale de chaque casier est de 1,0.
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(x, bins=50, normed=True)
ax.set_title('third histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
fig.show()
Lors de la comparaison d'histogrammes, il peut être pratique de fixer l'axe vertical. Dans ce cas, set_ylim (min, max) doit être utilisé pour fixer l'axe vertical. Si set_ylim n'est pas utilisé, l'axe vertical est ajusté pour que l'histogramme soit dessiné exactement en fonction de la fréquence des données.
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(x, bins=50, normed=True)
ax.set_title('fourth histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
ax.set_ylim(0,0.1)
fig.show()
Appelez simplement hist deux fois.
import numpy as np
import matplotlib.pyplot as plt
mu1, sigma1 = 100, 15
mu2, sigma2 = 70, 6
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(x1, bins=50, normed=True, color='red')
ax.hist(x2, bins=50, normed=True, color='blue')
ax.set_title('fifth histogram $\mu1=100,\ \sigma1=15,\ \mu2=50,\ \sigma2=4$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
ax.set_ylim(0,0.1)
fig.show()
Lorsque plusieurs histogrammes sont écrits sur un graphique, la partie superposée est masquée. À ce stade, si vous rendez le graphique semi-transparent, il sera un peu plus facile à voir. Pour le rendre semi-transparent, définissez alpha = 0,5 comme paramètre. À ce stade, si la valeur est définie sur alpha = 1.0, le graphique devient opaque et devient le même que lorsque alpha n'est pas spécifié. Lorsque alpha = 0,0, le graphique devient transparent et complètement invisible.
import numpy as np
import matplotlib.pyplot as plt
mu1, sigma1 = 100, 15
mu2, sigma2 = 70, 6
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(x1, bins=50, normed=True, color='red', alpha=0.5)
ax.hist(x2, bins=50, normed=True, color='blue',alpha=0.5)
ax.set_title('sixth histogram $\mu1=100,\ \sigma1=15,\ \mu2=50,\ \sigma2=4$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
ax.set_ylim(0,0.1)
fig.show()
Lorsque vous dessinez plusieurs histogrammes sur un même graphique, vous souhaiterez peut-être organiser les barres côte à côte en unités de casier pour faciliter la comparaison. Dans ce cas, faites des données une liste comme [x1, x2, x3] et faites-les comme hist ([x1, x2, x3]). Faites également une liste de couleurs et d'étiquettes.
import numpy as np
import matplotlib.pyplot as plt
mu1, sigma1 = 100, 15
mu2, sigma2 = 90, 20
mu3, sigma3 = 110, 10
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
x3 = mu3 + sigma3 * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist([x1, x2, x3], bins=10, normed=True, color=['red', 'blue', 'green'], label=['x1', 'x2', 'x3'])
ax.set_title('seventh histogram $\mu1=100,\ \sigma1=15,\ \mu2=50,\ \sigma2=4$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
ax.legend(loc='upper left')
fig.show()
Lorsque vous dessinez plusieurs histogrammes sur un graphique, vous souhaiterez peut-être empiler les barres verticalement lorsque vous souhaitez comparer le total de trois. Dans ce cas, les données doivent être hist ([x1, x2, x3]) comme dans le cas horizontal, et le paramètre doit être empilé = True.
import numpy as np
import matplotlib.pyplot as plt
mu1, sigma1 = 100, 15
mu2, sigma2 = 90, 20
mu3, sigma3 = 110, 10
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
x3 = mu3 + sigma3 * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist([x1, x2, x3], bins=10, normed=True, color=['red', 'blue', 'green'], label=['x1', 'x2', 'x3'], histtype='bar', stacked=True)
ax.set_title('eighth histogram $\mu1=100,\ \sigma1=15,\ \mu2=50,\ \sigma2=4$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
ax.legend(loc='upper left')
fig.show()
Si vous spécifiez le nombre de cases, l'espacement des cases est automatiquement déterminé en fonction des valeurs maximale et minimale des données. Il y a des moments où vous souhaitez décider vous-même de l'espacement des cases sans dépendre des données, par exemple lorsque vous souhaitez créer un histogramme dans la plage où les données peuvent être prises. Dans ce cas, créez une liste d'arêtes de bac et spécifiez bacs = arêtes dans le paramètre. Le bord d'un bac fait référence à la valeur limite inférieure ou à la valeur limite supérieure du bac. Par exemple, lorsque le nombre de bacs est de 10, le nombre d'arêtes est de 11.
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
edges = range(0,160,10)
n, bins, patches = ax.hist(x, bins=edges)
ax.set_title('ninth histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
fig.show()
Si vous souhaitez dessiner le graphique et acquérir les données de fréquence de l'histogramme à ce moment-là en même temps,
Obtenez des données de fréquence avec la valeur de retour de hist comme n, bins, pathces = ax.hist (x, ...)
.
Les correctifs sont une liste et le contenu sont des objets pour chaque casier de l'histogramme dessiné. Si vous modifiez la propriété de l'objet dans la corbeille de l'histogramme, vous ne pouvez modifier la couleur que de cette partie.
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
edges = range(0,160,10)
n, bins, patches = ax.hist(x, bins=edges)
ax.set_title('tenth histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
patches[9].set_facecolor('red')
patches[10].set_facecolor('green')
fig.show()
Recommended Posts