[Python] Comment dessiner un histogramme avec Matplotlib

Utilisez hist pour écrire un histogramme avec matplotlib. Quelques exemples sont présentés ci-dessous.

Histogramme simple

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()

histogram2D_01.png

Un exemple dans lequel le nombre de bacs est de 10 (bacs = 10). histogram2D_02.png

Normaliser l'histogramme

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()

histogram2D_03.png

Fixer l'axe vertical

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()

histogram2D_04.png

Dessinez deux histogrammes sur un graphique

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()

histogram2D_05.png

Rendre le graphique translucide

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()

histogram2D_06.png

Lorsque vous souhaitez organiser les histogrammes côte à côte

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()

histogram2D_07.png

Lorsque vous souhaitez empiler les histogrammes verticalement

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()

histogram2D_08.png

Si vous souhaitez spécifier vous-même l'espacement des emplacements

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()

histogram2D_09.png

Lorsque vous souhaitez obtenir les données de l'histogramme

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, ...).

Quels sont les patchs de retour?

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()

histogram2D_10.png

Recommended Posts

[Python] Comment dessiner un histogramme avec Matplotlib
[Python] Comment dessiner un graphique linéaire avec Matplotlib
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
Comment obtenir stacktrace en python
Comment incorporer des variables dans des chaînes python
Comment créer un fichier JSON en Python
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
Comment notifier les canaux Discord en Python
Comment développer en Python
Dessinez un cœur en Python
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment développer des variables dans une chaîne de caractères
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Python] Comment faire PCA avec Python
Comment collecter des images en Python
Dessinez une matrice de diagramme de dispersion avec python
Comment utiliser SQLite en Python
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Dessinez un diagramme CNN en Python
Comment gérer le japonais avec Python
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Une histoire sur la façon de spécifier un chemin relatif en python.
Comment utiliser la méthode __call__ dans la classe Python
Comment importer des fichiers où vous le souhaitez en Python
Comment définir plusieurs variables dans une instruction Python for
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment développer dans un environnement virtuel Python [Memo]
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
[Introduction à Python] Comment utiliser la classe en Python?
Comment supprimer l'erreur d'affichage dans matplotlib
Comment définir dynamiquement des variables en Python
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser BigQuery en Python
Dessiner un cœur avec Python Partie 2 (SymPy Edition)
[Python] Comment inverser une chaîne de caractères
Comment extraire une zone de polygone en Python
Comment vérifier la version d'opencv avec python
Comment régler le contraste de l'image en Python
Comment remplir dynamiquement des zéros avec Python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Comment utiliser is et == en Python
Comment écrire Ruby to_s en Python
Comment exécuter des scripts Maya Python
Comment dessiner une image OpenCV avec Pygame
Comment déterminer l'existence d'un élément sélénium en Python
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
Comment vérifier la taille de la mémoire d'une variable en Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?