Introduction
Dans ce laboratoire, nous allons apprendre à créer un graphique en chapeau en Python à l'aide de la bibliothèque Matplotlib. Un graphique en chapeau est une variante d'un graphique en barres empilées, où chaque barre est en forme de chapeau. Nous utiliserons un ensemble de données de scores par nombre de parties et de joueurs pour créer le graphique.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques
Dans cette étape, nous allons importer les bibliothèques nécessaires pour créer le graphique en chapeau.
import matplotlib.pyplot as plt
import numpy as np
Définir la fonction du graphique en chapeau
Dans cette étape, nous allons définir une fonction qui crée le graphique en chapeau. La fonction prend les paramètres suivants :
- ax : Les axes sur lesquels tracer.
- xlabels : Les noms des catégories à afficher sur l'axe des x.
- values : Les valeurs des données. Les lignes sont les groupes, et les colonnes sont les catégories.
- group_labels : Les étiquettes des groupes affichées dans la légende.
def hat_graph(ax, xlabels, values, group_labels):
"""
Crée un graphique en chapeau.
Paramètres
----------
ax : matplotlib.axes.Axes
Les axes sur lesquels tracer.
xlabels : liste de str
Les noms des catégories à afficher sur l'axe des x.
values : (M, N) array-like
Les valeurs des données.
Les lignes sont les groupes (len(group_labels) == M).
Les colonnes sont les catégories (len(xlabels) == N).
group_labels : liste de str
Les étiquettes des groupes affichées dans la légende.
"""
def label_bars(heights, rects):
"""Attache une étiquette de texte au-dessus de chaque barre."""
for height, rect in zip(heights, rects):
ax.annotate(f'{height}',
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 4), ## Décalage vertical de 4 points.
textcoords='offset points',
ha='center', va='bottom')
values = np.asarray(values)
x = np.arange(values.shape[1])
ax.set_xticks(x, labels=xlabels)
spacing = 0.3 ## Espacement entre les groupes de chapeaux
width = (1 - spacing) / values.shape[0]
heights0 = values[0]
for i, (heights, group_label) in enumerate(zip(values, group_labels)):
style = {'fill': False} if i == 0 else {'edgecolor': 'black'}
rects = ax.bar(x - spacing/2 + i * width, heights - heights0,
width, bottom=heights0, label=group_label, **style)
label_bars(heights, rects)
Préparer les données
Dans cette étape, nous allons initialiser des étiquettes et un tableau numpy. Nous nous assurerons d'avoir N étiquettes pour N valeurs dans le tableau.
## initialise labels and a numpy array make sure you have
## N labels of N number of values in the array
xlabels = ['I', 'II', 'III', 'IV', 'V']
playerA = np.array([5, 15, 22, 20, 25])
playerB = np.array([25, 32, 34, 30, 27])
Créer le graphique en chapeau
Dans cette étape, nous allons créer le graphique en chapeau à l'aide des données préparées dans l'étape précédente et de la fonction hat_graph.
fig, ax = plt.subplots()
hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B'])
## Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_xlabel('Games')
ax.set_ylabel('Score')
ax.set_ylim(0, 60)
ax.set_title('Scores by number of game and players')
ax.legend()
fig.tight_layout()
plt.show()
Code complet
Voici le code complet pour créer le graphique en chapeau en Python.
import matplotlib.pyplot as plt
import numpy as np
def hat_graph(ax, xlabels, values, group_labels):
"""
Crée un graphique en chapeau.
Paramètres
----------
ax : matplotlib.axes.Axes
Les axes sur lesquels tracer.
xlabels : liste de str
Les noms des catégories à afficher sur l'axe des x.
values : (M, N) array-like
Les valeurs des données.
Les lignes sont les groupes (len(group_labels) == M).
Les colonnes sont les catégories (len(xlabels) == N).
group_labels : liste de str
Les étiquettes des groupes affichées dans la légende.
"""
def label_bars(heights, rects):
"""Attache une étiquette de texte au-dessus de chaque barre."""
for height, rect in zip(heights, rects):
ax.annotate(f'{height}',
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 4), ## Décalage vertical de 4 points.
textcoords='offset points',
ha='center', va='bottom')
values = np.asarray(values)
x = np.arange(values.shape[1])
ax.set_xticks(x, labels=xlabels)
spacing = 0.3 ## Espacement entre les groupes de chapeaux
width = (1 - spacing) / values.shape[0]
heights0 = values[0]
for i, (heights, group_label) in enumerate(zip(values, group_labels)):
style = {'fill': False} if i == 0 else {'edgecolor': 'black'}
rects = ax.bar(x - spacing/2 + i * width, heights - heights0,
width, bottom=heights0, label=group_label, **style)
label_bars(heights, rects)
## initialise labels and a numpy array make sure you have
## N labels of N number of values in the array
xlabels = ['I', 'II', 'III', 'IV', 'V']
playerA = np.array([5, 15, 22, 20, 25])
playerB = np.array([25, 32, 34, 30, 27])
fig, ax = plt.subplots()
hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B'])
## Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_xlabel('Games')
ax.set_ylabel('Score')
ax.set_ylim(0, 60)
ax.set_title('Scores by number of game and players')
ax.legend()
fig.tight_layout()
plt.show()
Résumé
Dans ce laboratoire, nous avons appris à créer un graphique en chapeau en Python à l'aide de la bibliothèque Matplotlib. Nous avons défini une fonction qui crée le graphique en chapeau, préparé les données et créé le graphique à l'aide de la fonction hat_graph. Le graphique en chapeau est une variante d'un graphique à barres empilées, où chaque barre est en forme de chapeau. Nous avons utilisé un ensemble de données de scores en fonction du nombre de parties et des joueurs pour créer le graphique.