Courbes multiples et styles avec Matplotlib
Objectif pédagogique : Maîtriser la création de graphiques multi-courbes avec styles personnalisés et légendes en Python
À la fin de ce chapitre, tu seras capable de…
- Superposer plusieurs courbes sur un même graphique
- Personnaliser les styles de ligne, couleurs et marqueurs
- Configurer les légendes et grilles des graphiques
- Contrôler l’épaisseur des lignes et les axes
- Créer des visualisations professionnelles multi-données
💡 Prérequis : Maîtriser les bases de Matplotlib, créer des graphiques simples avec plt.plot(), connaître NumPy et les tableaux
Mise en contexte
Vous allez découvrir comment transformer vos graphiques basiques en visualisations professionnelles multi-courbes. Imaginez pouvoir comparer trois fonctions mathématiques (x, x², x³) sur un seul graphique avec des styles distincts : pointillés rouge, ligne verte épaisse, tirets bleus avec marqueurs diamant. Vous apprendrez à personnaliser chaque élément visual pour créer des graphiques clairs et informatifs comme celui comparant deux trajets avec grille et légendes.
1 – Les courbes multiples, styles de ligne et légendes
Pour superposer plusieurs courbes sur un même graphique, nous pouvons cumuler les instructions plot les unes après les autres :
plt.plot(x1, y1)
plt.plot(x2, y2)
plt.plot(x3, y3)
ou simplement utiliser la syntaxe suivante :
plt.plot(x1, y1, x2, y2, x3, y3)
- Créer une liste appelée x composée de la séquence de 0 à 10, avec un pas de 0.5, grâce à la fonction arange
La commande np.arange(a, b, p) retourne un tableau 1D des nombres compris entre a et b (b exclus), avec un pas de p.
- Dans un même graphe, tracer les courbes des fonctions suivantes :
en délimitant l’axe des ordonnées entre 0 et 50.
x = np.arange(0, 10, 0.5)
plt.plot(x, x, x, x**2, x, x**3)
plt.ylim([0, 50]);

- ‘-‘ : ligne continue
- ‘–‘ : tirets
- ‘:’ : ligne en pointillé
- ‘-.’ : tirets points
- ‘b’ (bleu)
- ‘g’ (vert)
- ‘r’ (rouge)
- ‘c’ (cyan)
- ‘m’ (magenta)
- ‘y’ (jaune)
- ‘k’ (noir)
- ‘w’ (blanc)
x = np.arange(0, 10, 0.5)
plt.plot(x, x, ‘:r’, x, x**2, ‘-g’, x, x**3,’–b’)
plt.ylim([0, 50])
plt.show()

Il est également possible d’ajouter des marqueurs de points à l’aide de symboles, que l’on peut rajouter aux lignes de courbes ou utiliser à la place des lignes. Ces symboles peuvent également être concaténés avec les couleurs présentées ci-dessus. Les symboles possibles sont :
- ‘.’ : point marker
- ‘,’ : pixel marker
- ‘o’ : circle marker
- ‘v’ : triangle_down marker
- ‘^’ : triangle_up marker
- ‘<‘ : triangle_left marker
- ‘>’ : triangle_right marker
- ‘1’ : tri_down marker
- ‘2’ : tri_up marker
- ‘3’ : tri_left marker
- ‘4’ : tri_right marker
- ‘s’ : square marker
- ‘p’ : pentagon marker
- ‘*’ : star marker
- ‘h’ : hexagon1 marker
- ‘H’ : hexagon2 marker
- ‘+’ : plus marker
- ‘x’ : x marker
- ‘D’ : diamond marker
- ‘d’ : thin_diamond marker
- ‘|’ : vline marker
- ‘_’ : hline marker
Dans le paramètre style, il est possible de préciser d’un seul coup, dans cet ordre, et dans une seule chaîne de caractère : la couleur, le style de ligne et les marqueurs à utiliser pour une courbe.
Exemple :
- « r-* » pour une ligne continue rouge et marqueurs étoiles,
- « y:d » pour une ligne en pointillés jaune et marqueurs en diamants, …
Lorsque l’on trace une ligne, il est également possible de régler sa largeur grâce à l’argument linewidth de plot.
Ainsi, la commande plt.plot(x , y , "r--", linewidth=5, marker= 'o') affiche une ligne en tirets rouge, d’épaisseur 5, avec des marqueurs ronds.
- Tracer à nouveau les 3 courbes de la question précédente en les affichant respectivement : en marqueurs ‘hexagone1’ jaunes, en ligne verte d’épaisseur 5 et en ligne bleue avec des marqueurs en diamants.
x = np.arange(0, 10, 0.5)
plt.plot(x, x,'hy')
plt.plot(x, x**2,'g-', linewidth=5)
plt.plot(x, x**3,'b', marker='D')
plt.ylim([0, 50]);

Exercice pratique
- Dans un graphique muni d’une grille, afficher les courbes suivantes :
- Les points (50, 2), (100, 3), (150, 7), (200, 10) reliés par une ligne bleue d’épaisseur 0.8 et des marqueurs ‘*’ avec le label ‘Trajet 1’
- Les points (50, 2), (100, 7), (150, 9), (200, 10) reliés par une ligne verte d’épaisseur 0.8 et des marqueurs ‘+’ avec le label ‘Trajet 2’
- Donner respectivement à l’axe des abscisses et des ordonnées les labels ‘Vitesse’ et ‘Temps’.
- Ajouter les légendes au graphique.
plt.grid(True)
plt.plot([50,100,150,200], [2,3,7,10], "b-*", linewidth=0.8, label="Trajet 1")
plt.plot([50,100,150,200], [2,7,9,10], "g-+", linewidth=0.8, label="Trajet 2")
plt.xlabel('Vitesse')
plt.ylabel('Temps');

En utilisant les méthodes intégrés des DataFrames Pandas on peut également rajouter du style au graphique en utilisant les mêmes noms de paramètres. Il est également possible d’afficher plusieurs courbes dans le même graphique, en insérant une liste dans le paramètre y.
Le paramètre style peut aussi recevoir une liste, afin d’associer à chaque courbe son prope style.
Exemple : mon_df.plot(x= col1, y = [col2,col3], style = [« r–« , « c-+ »])
💡 Exercice :
Dans un exemple plus haut, nous avons convertit la colonne date_reservation du DataFrame df_reservations en format datetime. Nous avons aussi extrait le mois sous forme d’entiers (1, 2, …, 12).
Ensuite, nous avons calculé le montant total de location pour chaque mois (avec la colonne ‘montant_location’).
- Nous voulons maintenant calculer le montant de location avec options en utilisant la colonne montant_total_avec_options.
montant_avec_options_par_mois=df_reservations.groupby(‘month’)[‘montant_total_avec_options’].sum()

- Créer un dataframe nommé df_montant_mensuel avec les 3 colonnes ‘noms_mois’, ‘montant_par_mois’ et ‘montant_avec_options_par_mois’
- Afficher les courbes relatives aux colonnes ‘montant_location’ et ‘montant_total_avec_options’, en fonction de ‘month’, ajouter un style différent pour chacune des courbes, ainsi que le titre « Montant total de location par mois ».
df_montant_mensuel = pd.DataFrame({
'mois': noms_mois,
'montant_par_mois': montant_par_mois.values,
'montant_avec_options_par_mois': montant_avec_options_par_mois.values
})

df_montant_mensuel.plot(x=’mois’, y=[‘montant_par_mois’, ‘montant_avec_options_par_mois’], style = [« r–« , « c-+ »])
plt.xlabel(‘Mois’)
plt.ylabel(‘Montant total des location’)
Pour afficher exactement 12 graduations sur l’axe des x
rotation = 45° incline les étiquettes à 45° pour éviter le chevauchement
plt.xticks(range(len(noms_mois)), noms_mois, rotation=45, ha=’right’);

Conclusion
Nous avons appris à tracer différents des courbes simples et des courbes multiples avec personnalisation.