Maîtriser les tracés multiples sur la même figure avec Matplotlib
Updated on
Créer des visualisations de données captivantes est une compétence essentielle dans le domaine de la science des données. Un outil précieux dans cette quête est Matplotlib, une bibliothèque Python spécialement conçue pour la visualisation de données. Dans ce guide complet, nous explorerons les spécificités de la création de plusieurs tracés sur la même figure avec Matplotlib. Cette capacité est particulièrement utile lorsque vous avez besoin de comparer plusieurs tendances de données sur un canevas unifié, ce qui améliore encore la clarté et la lisibilité de vos visualisations de données.
Les bases des tracés multiples avec Matplotlib
Avant de nous plonger dans des visualisations plus complexes, couvrons les fondamentaux du tracé de plusieurs lignes sur la même figure à l'aide de Matplotlib.
Le module pyplot de Matplotlib facilite la création de graphiques et de tracés. Sa syntaxe est remarquablement similaire à celle de MATLAB, ce qui peut être avantageux pour ceux qui sont familiers avec ce système. Pour commencer, voici un exemple simple qui illustre comment créer une figure avec deux lignes utilisant différents ensembles de données :
import matplotlib.pyplot as plt
# Données d'exemple
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
# Création des tracés
plt.plot(x, y1, 'b-', label='Ascendant')
plt.plot(x, y2, 'r-', label='Descendant')
# Inclusion de la légende
plt.legend(loc='best')
# Affichage de la figure
plt.show()
Dans cet exemple, plt.plot(x, y1, 'b-', label='Ascendant')
et plt.plot(x, y2, 'r-', label='Descendant')
tracent les ensembles de données y1 et y2 par rapport à x. Les arguments 'b-' et 'r-' définissent la couleur et le type de ligne (respectivement bleu et rouge), tandis que 'Ascendant' et 'Descendant' servent de légende pour les tracés. L'appel à la fonction plt.legend(loc='best')
place la légende à l'emplacement qui chevauche le moins les lignes tracées.
Plus de tracés, plus de complexité : l'API orientée objet de Matplotlib
Bien que la technique mentionnée précédemment soit simple et efficace pour les tracés simples, elle peut être limitante lorsqu'il s'agit de visualisations plus complexes. C'est là que l'API orientée objet de Matplotlib entre en jeu. En créant des objets Figure et Axes, vous avez un contrôle plus précis sur les éléments du tracé. Voici comment vous pouvez utiliser cette API pour obtenir le même résultat qu'auparavant :
# Création d'un nouvel objet Figure et Axes
fig, ax = plt.subplots()
# Tracé des données sur l'Axes
ax.plot(x, y1, 'b-', label='Ascendant')
ax.plot(x, y2, 'r-', label='Descendant')
# Inclusion de la légende
ax.legend(loc='best')
# Affichage de la figure
plt.show()
Décryptage du code : comprendre l'approche orientée objet
Vous vous demandez peut-être : pourquoi utiliser l'API orientée objet plus verbeuse lorsque le module pyplot plus simple fait le travail ? À mesure que vos visualisations deviennent plus sophistiquées, la réponse devient évidente. L'utilisation d'objets Figure et Axes vous donne un plus grand contrôle sur vos tracés. Elle permet une personnalisation que l'interface pyplot plus simple ne fournit pas facilement.
Considérez les objets Figure et Axes comme des conteneurs pour votre tracé. L'objet Figure est la fenêtre ou la page globale sur laquelle tout est dessiné. Il peut contenir plusieurs objets Axes. Chaque objet Axes est un tracé distinct avec ses propres éléments (lignes, légendes, étiquettes, etc.).
Avec cette compréhension, vous pouvez voir que l'approche orientée objet constitue une base solide pour des visualisations de plusieurs tracés plus complexes, que nous explorerons dans les sections suivantes.
Tracés multiples : plus d'un Axes sur une figure
Nous avons vu comment tracer plusieurs lignes dans un même objet Axes, mais que faire si nous voulons comparer des sous-tracés complètement distincts dans la même Figure ? La fonction subplots()
de Matplotlib permet de réaliser cela de manière efficace. La fonction subplots()
crée une nouvelle Figure et plusieurs objets Axes en une seule fois, les renvoyant pour notre utilisation. Voyons comment générer quatre sous-tracés, avec deux lignes et deux colonnes, sur la même Figure :
# Création d'une nouvelle Figure avec une grille 2x2 d'Axes
fig, axs = plt.subplots(2, 2)
# Définition de quelques données d'exemple
x = [1, 2, 3, 4, 5]
y = [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [6, 5, 4, 3, 2]]
# Tracé des données sur chaque Axes
for i, ax in enumerate(axs.flatten()):
ax.plot(x, y[i])
# Affichage de la figure
plt.show()
Dans ce cas, plt.subplots(2, 2)
crée une grille 2x2 d'Axes, et axs.flatten()
est utilisé pour itérer sur ces Axes dans une simple boucle for.
Plusieurs axes Y : quand un axe Y ne suffit pas
Parfois, vous devez tracer différents ensembles de données ayant des échelles ou des unités différentes sur le même graphique. Utiliser deux axes Y différents sur un même tracé est une solution parfaite pour de tels scénarios. Avec l'API orientée objet de Matplotlib, c'est simple :
# Création d'une nouvelle Figure et d'un Axes
fig, ax1 = plt.subplots()
# Création d'un deuxième Axes qui partage le même axe X
ax2 = ax1.twinx()
# Tracé des données sur chaque Axes
ax1.plot(x, y1, 'b-', label='Ensemble de données 1')
ax2.plot(x, y2, 'r-', label='Ensemble de données 2')
# Définition des étiquettes des axes Y
ax1.set_ylabel('Ensemble de données 1', color='b')
ax2.set_ylabel('Ensemble de données 2', color='r')
# Affichage de la figure
plt.show()
Dans ce cas, ax1.twinx()
crée un nouvel Axes qui partage l'axe X avec ax1 mais possède un axe Y séparé.
Alternative à Matplotlib : visualisez les données avec PyGWalker
Outre l'utilisation de Matplotlib pour visualiser votre dataframe pandas, voici une alternative, une bibliothèque Python Open Source qui peut vous aider à créer des visualisations de données facilement : PyGWalker (opens in a new tab).
(opens in a new tab) Pas besoin de réaliser un traitement compliqué avec du code Python, il suffit d'importer vos données et de glisser-déposer les variables pour créer toutes sortes de visualisations de données ! Voici une vidéo de démonstration rapide sur son fonctionnement :
Voici comment utiliser PyGWalker dans votre notebook Jupyter :
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
Alternativement, vous pouvez l'essayer dans Kaggle Notebook/Google Colab :
PyGWalker est construit avec le soutien de notre communauté Open Source. N'oubliez pas de consulter PyGWalker GitHub (opens in a new tab) et de nous donner une étoile !
Conclusion
Maîtriser l'art de créer plusieurs graphiques sur la même figure avec Matplotlib peut pousser vos compétences en visualisation de données à un tout autre niveau. En comprenant les concepts de base et en vous aventurant progressivement dans des territoires plus complexes, vous pouvez utiliser efficacement Matplotlib pour donner vie à vos données.
FAQ
- Quels sont les avantages de créer plusieurs graphiques sur la même figure avec Matplotlib ?
Avoir plusieurs graphiques sur la même figure peut grandement améliorer votre visualisation de données. Cette fonctionnalité permet des comparaisons de données plus simples, car vous pouvez analyser plusieurs tendances de données sur une seule toile. Elle améliore également la clarté et la lisibilité de vos représentations de données.
- Quand dois-je utiliser l'API orientée objet de Matplotlib ?
Bien que le module pyplot soit simple et utile pour les graphiques simples, l'API orientée objet de Matplotlib est mieux adaptée aux visualisations complexes. En interagissant directement avec les objets Figures et Axes, vous avez un contrôle plus précis sur les éléments du graphique, ce qui peut être inestimable lorsque vos visualisations nécessitent un degré plus élevé de personnalisation.
- Quel est l'intérêt de plusieurs axes y dans un unique graphique ?
Les axes y multiples sont particulièrement utiles lorsque vous voulez représenter différents ensembles de données avec différentes échelles ou unités sur le même graphique. En assignant chaque ensemble de données à son axe y, vous pouvez représenter efficacement ces différentes échelles ou unités sans déformer ou dénaturer vos données.