Accéder au contenu principal

Tutoriel Python sur le tracé des lignes : Créer des visualisations de données

Découvrez comment utiliser Seaborn, une bibliothèque populaire de visualisation de données en Python, pour créer et personnaliser des tracés linéaires en Python.
Actualisé 14 nov. 2024  · 12 min de lecture

Un graphique linéaire est une visualisation de données relationnelles montrant comment une variable continue change lorsqu'une autre change. C'est l'un des graphiques les plus courants, utilisé dans les domaines de la finance, des ventes, du marketing, de la santé, des sciences naturelles, etc.

Dans ce tutoriel, nous verrons comment utiliser Seaborn, une bibliothèque populaire de visualisation de données en Python, pour créer et personnaliser des tracés linéaires en Python.

Présentation de l'ensemble de données

Pour nous entraîner à tracer des courbes de Seaborn, nous allons d'abord télécharger un jeu de données Kaggle intitulé Daily Exchange Rates per Euro 1999-2023. Ensuite, nous importerons tous les paquets nécessaires et nous lirons et nettoierons le DataFrame. Sans entrer dans les détails du processus de nettoyage, le code ci-dessous montre les étapes à suivre :

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 1, 4, -2]]
df.columns = ['Date', 'Australian dollar', 'Canadian dollar', 'US dollar']
df = pd.melt(df, id_vars='Date', value_vars=['Australian dollar', 'Canadian dollar', 'US dollar'], value_name='Euro rate', var_name='Currency')
df['Date'] = pd.to_datetime(df['Date'])
df = df[df['Date']>='2022-12-01'].reset_index(drop=True)
df['Euro rate'] = pd.to_numeric(df['Euro rate'])
print(f'Currencies: {df.Currency.unique()}\n')
print(df.head())
print(f'\n{df.Date.dt.date.min()}/{ df.Date.dt.date.max()}')

Sortie:

Currencies: ['Australian dollar' 'Canadian dollar' 'US dollar']

        Date           Currency  Euro rate
0 2023-01-27  Australian dollar     1.5289
1 2023-01-26  Australian dollar     1.5308
2 2023-01-25  Australian dollar     1.5360
3 2023-01-24  Australian dollar     1.5470
4 2023-01-23  Australian dollar     1.5529

2022-12-01/2023-01-27

Le DataFrame résultant contient les taux quotidiens (jours ouvrables) de l'euro pour les dollars australien, canadien et américain pour la période allant du 01.12.2022 au 27.01.2023 inclus.

Nous sommes maintenant prêts à nous plonger dans la création et la personnalisation des tracés de lignes Python.

Les bases de l'intrigue de la ligne Seaborn

Pour créer un graphique linéaire dans Seaborn, nous pouvons utiliser l'une des deux fonctions suivantes : lineplot() ou relplot(). Dans l'ensemble, ils ont beaucoup de fonctionnalités en commun, ainsi que des noms de paramètres identiques. La principale différence est que relplot() nous permet de créer des graphiques linéaires avec plusieurs lignes sur différentes facettes. En revanche, lineplot() permet de travailler avec les intervalles de confiance et l'agrégation des données.

Dans ce tutoriel, nous utiliserons principalement la fonction lineplot().

Le cours Introduction à la visualisation de données avec Seaborn vous aidera à apprendre et à pratiquer les principales fonctions et méthodes de la bibliothèque Seaborn. Vous pouvez également consulter notre tutoriel Seaborn pour les débutants afin de vous familiariser avec la célèbre bibliothèque Python. 

Création d'un tracé de ligne de mer unique

Nous pouvons créer un graphique linéaire montrant les relations entre deux variables continues de la manière suivante :

usd = df[df['Currency']=='US dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)

Sortie:

Tracé à une ligne de Seaborn avec tracé linéaire

Le graphique ci-dessus montre la dynamique du taux EUR-USD. Nous avons défini les variables à tracer sur les axes x et y (les paramètres x et y ) et le dataFrame (données) à partir duquel ces variables doivent être extraites.

A titre de comparaison, pour créer le même graphique en utilisant relplot(), nous écririons ce qui suit :

sns.relplot(x='Date', y='Euro rate', data=usd, kind='line')

Sortie:

Tracé à une ligne de Seaborn avec relplot

Dans ce cas, nous avons passé un argument supplémentaire spécifique à la fonction relplot() : kind='line'. Par défaut, cette fonction crée un diagramme de dispersion.

Personnalisation d'un tracé de ligne de seaborn unique

Nous pouvons personnaliser le graphique ci-dessus de nombreuses façons pour le rendre plus lisible et plus informatif. Par exemple, nous pouvons ajuster la taille de la figure, ajouter des étiquettes de titre et d'axe, ajuster la taille de la police, personnaliser la ligne, ajouter et personnaliser des marqueurs, etc. Voyons comment mettre en œuvre ces améliorations dans seaborn.

Ajustement de la taille de la figure

Comme Seaborn est construit au-dessus de matplotlib, nous pouvons utiliser matplotlib.pyplot pour ajuster la taille de la figure :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd)

Sortie:

Tracé à une ligne de Seaborn - taille de la figure ajustée avec relplot

En revanche, avec relplot(), nous pouvons utiliser les paramètres de hauteur et d'aspect (le rapport entre la largeur et la hauteur) dans le même but :

sns.relplot(x='Date', y='Euro rate', data=usd, kind='line', height=6, aspect=4)

Sortie:

Seaborn plot.png

Ajout d'un titre et d'étiquettes d'axes

Pour ajouter un titre de graphique et des étiquettes d'axe, nous pouvons utiliser la fonction set() sur l'objet de tracé de ligne seaborn en passant les arguments title, xlabel, et ylabel :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')

Sortie:

Seaborn single-line plot - ajout d'un titre et d'étiquettes d'axes

Ajustement de la taille de la police

Un moyen pratique d'ajuster la taille de la police est d'utiliser la fonction set_theme() et d'expérimenter différentes valeurs du paramètre font_scale :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à une ligne de Seaborn - taille de police ajustée

Notez que nous avons également ajouté style='white' pour éviter d'écraser le style initial.

Modifier la couleur, le style et la taille des lignes

Pour personnaliser la ligne de tracé, nous pouvons passer quelques paramètres optionnels communs à matplotlib.pyplot.plot, tels que la couleur, le style de ligne ou la largeur de ligne :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, linestyle='dotted', color='magenta', linewidth=5).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à une ligne de Seaborn - ligne personnalisée

Ajout de marqueurs et personnalisation de leur couleur, de leur style et de leur taille

Il est possible d'ajouter des marqueurs sur la ligne et de personnaliser leur apparence. Dans ce cas, nous pouvons également utiliser certains paramètres de matplotlib, tels que marker, markerfacecolor, ou markersize :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, marker='*', markerfacecolor='limegreen', markersize=20).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé unifilaire de Seaborn - marqueurs ajoutés et personnalisés

La documentation nous fournit la liste définitive des paramètres à utiliser pour améliorer l'esthétique d'un tracé de ligne de mer. En particulier, nous pouvons voir tous les choix possibles de marqueurs.

Dans notre aide-mémoire Seaborn, vous trouverez d'autres façons de personnaliser un tracé linéaire dans Seaborn.

Tracés de lignes Seaborn avec lignes multiples

Souvent, nous devons étudier comment plusieurs variables continues changent en fonction d'une autre variable continue. À cette fin, nous pouvons construire un graphique à lignes multiples. Les fonctions lineplot() et relplot() sont également applicables à ces cas.

Création d'un tracé de ligne de mer avec plusieurs lignes

Techniquement, il est possible de créer un graphique à lignes multiples en construisant un objet axe distinct pour chaque variable dépendante, c'est-à-dire pour chaque ligne :

aud = df[df['Currency']=='Australian dollar'].reset_index(drop=True)
cad = df[df['Currency']=='Canadian dollar'].reset_index(drop=True)

sns.lineplot(x='Date', y='Euro rate', data=usd)
sns.lineplot(x='Date', y='Euro rate', data=aud)
sns.lineplot(x='Date', y='Euro rate', data=cad)

Sortie:

Diagramme à lignes multiples de Seaborn - objets d'axes séparés pour les variables dépendantes

Ci-dessus, nous avons extrait deux autres sous-ensembles de notre DataFrame initiale df - pour les dollars australien et canadien - et nous avons tracé chaque taux d'euro en fonction du temps. Cependant, il existe des solutions plus efficaces : l'utilisation des paramètres de teinte, de style ou de taille, disponibles dans les fonctions lineplot() et relplot().

Utilisation du paramètre de teinte

Ce paramètre fonctionne comme suit : nous lui attribuons le nom d'une colonne de DataFrame contenant des valeurs catégorielles, puis seaborn génère un graphique linéaire pour chaque catégorie en donnant une couleur différente à chaque ligne :

sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency')

Sortie:

Tracé à lignes multiples de Seaborn utilisant la teinte

Avec une seule ligne de code simple, nous avons créé un graphique en ligne pour trois catégories. Notez que nous avons transmis le DataFrame initial df au lieu de ses sous-ensembles pour les différentes devises.

Utilisation du paramètre de style

Le paramètre de style fonctionne de la même manière que la teinte, à ceci près qu'il distingue les catégories en utilisant différents styles de ligne (solide, pointillé, pointillé, etc.), sans affecter la couleur :

sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency')

Sortie:

Tracé à lignes multiples de Seaborn utilisant le style

Utilisation du paramètre de taille

Tout comme la teinte et le style, le paramètre de taille crée une ligne distincte pour chaque catégorie. Cela n'affecte pas la couleur ni le style des lignes, mais rend chacune d'entre elles d'une largeur différente :

sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency')

Sortie:

Diagramme à lignes multiples de Seaborn utilisant la taille

Personnalisation d'un tracé de ligne de mer avec plusieurs lignes

Expérimentons maintenant l'esthétique de notre graphique. Certaines techniques sont identiques à celles que nous avons appliquées à un seul tracé de ligne Seaborn. Les autres ne sont spécifiques qu'aux tracés à lignes multiples.

Ajustements globaux

Nous pouvons ajuster la taille de la figure, ajouter un titre et des étiquettes d'axe, et modifier la taille de la police du graphique ci-dessus de la même manière que nous l'avons fait pour un tracé linéaire simple :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn - ajustements globaux

Modifier la couleur, le style et la taille de chaque ligne

Nous avons vu précédemment que lorsque les paramètres de teinte, de style ou de taille sont utilisés, seaborn fournit un ensemble de couleurs/styles/tailles par défaut pour un tracé linéaire comportant plusieurs lignes. Si nécessaire, nous pouvons remplacer ces valeurs par défaut et sélectionner nous-mêmes les couleurs, les styles et les tailles.

Lorsque nous utilisons le paramètre hue, nous pouvons également passer l'argument palette sous la forme d'une liste ou d'un tuple de noms de couleurs matplotlib :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen']).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn utilisant la teinte et fournissant une palette personnalisée

Il est également possible d'appliquer directement une palette matplotlib existante :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette='spring').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn utilisant la teinte et fournissant une palette standard

En même temps, lorsque vous utilisez la teinte, vous pouvez toujours ajuster le style et la largeur de toutes les lignes en passant par les arguments linestyle et linewidth :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen'], linestyle='dashed', linewidth=5).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn utilisant hue - ajustement du style, de la couleur et de la largeur des lignes

Au lieu de cela, lorsque nous créons un graphique à lignes multiples à l'aide du paramètre style, nous pouvons assigner une liste (ou un tuple) de listes (ou de tuples) à un paramètre appelé tirets :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples Seaborn utilisant un style et fournissant un motif personnalisé

Dans la liste ci-dessus des listes attribuées aux tirets, le premier élément de chaque sous-liste représente la longueur d'un segment de la ligne correspondante, tandis que le deuxième élément représente la longueur d'un espace.

Remarque : pour représenter une ligne continue, nous devons fixer la longueur d'un espace à zéro, par exemple : [1, 0].

Pour ajuster la couleur et la largeur de toutes les lignes de ce graphique, nous fournissons les arguments color et linewidth, comme nous l'avons fait lors de la personnalisation d'un seul tracé de ligne de seaborn :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]], color='darkviolet', linewidth=4).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples Seaborn utilisant le style - ajustement du style, de la couleur et de la largeur des lignes

Enfin, lorsque nous utilisons le paramètre size pour créer un graphique à lignes multiples de type seaborn, nous pouvons régler la largeur de chaque ligne à l'aide du paramètre sizes. Il prend en charge une liste (ou un tuple) d'entiers :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples Seaborn utilisant la taille et fournissant des largeurs de lignes personnalisées

Pour personnaliser la couleur et le style de toutes les lignes de ce tracé, nous devons fournir les arguments linestyle et color :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5], linestyle='dotted', color='teal').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn utilisant la taille - style, couleur et largeur de ligne ajustés

Ajout de marqueurs et personnalisation de leur couleur, de leur style et de leur taille

Il se peut que nous voulions ajouter des marqueurs sur notre graphique à lignes multiples de Seaborn.

Pour ajouter des marqueurs de la même couleur, du même style et de la même taille sur toutes les lignes, nous devons utiliser les paramètres de matplotlib, tels que marker, markerfacecolor, markersize, etc :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', marker='o', markerfacecolor='orangered', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn avec des marqueurs de même couleur, de même style et de même taille

Il en va autrement lorsque nous voulons des marqueurs différents pour chaque ligne. Dans ce cas, nous devons utiliser le paramètre markers, qui, selon les fonctionnalités de seaborn, ne fonctionne que lorsque le paramètre style est spécifié :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn avec des marqueurs de différents styles

Sur le graphique ci-dessus, nous pouvons rendre toutes les lignes solides en fournissant l'argument tirets et en définissant le modèle de style [1, 0] pour chaque ligne :

fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], dashes=[[1, 0], [1, 0], [1, 0]], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)

Sortie:

Tracé à lignes multiples de Seaborn avec des lignes pleines et des marqueurs de différents styles

Conclusion

Pour récapituler, dans ce tutoriel, nous avons appris plusieurs façons de créer et de personnaliser un tracé de lignes Seaborn avec une ou plusieurs lignes.

Pour aller de l'avant, avec seaborn, nous pouvons faire beaucoup plus pour ajuster davantage un tracé de ligne. Par exemple, nous pouvons :

  • Regrouper les lignes en fonction de plusieurs variables catégorielles
  • Personnaliser la légende
  • Créer des diagrammes linéaires avec plusieurs lignes sur différentes facettes
  • Afficher et personnaliser l'intervalle de confiance
  • Personnaliser les ticks de l'axe du temps et leurs étiquettes pour un graphique linéaire de série temporelle

Pour approfondir ce qui peut être fait avec seaborn et comment, vous pouvez suivre notre cours Intermediate Data Visualization with Seaborn (Visualisation de données intermédiaire avec Seaborn).

FAQ sur l'intrigue de la ligne Seaborn

Qu'est-ce qu'une intrigue linéaire dans Seaborn ?

Un graphique linéaire est un type de graphique dans Seaborn qui montre la relation entre deux variables en reliant les points de données par une ligne droite.

Quel type de données se prête le mieux à un tracé linéaire dans Seaborn ?

Les graphiques linéaires conviennent le mieux aux données pour lesquelles il existe une relation claire entre deux variables et pour lesquelles les variables sont continues ou ordinales.

Puis-je tracer plusieurs lignes sur la même parcelle dans Seaborn ?

Oui, vous pouvez tracer plusieurs lignes sur le même graphique dans Seaborn en utilisant le paramètre hue pour spécifier une variable catégorielle par laquelle regrouper les données.

Quelle est la différence entre un diagramme linéaire et un diagramme de dispersion dans Seaborn ?

Un graphique linéaire dans Seaborn montre la relation entre deux variables à l'aide d'une ligne droite, tandis qu'un graphique en nuage de points montre la relation à l'aide de points de données individuels.

Puis-je ajouter une ligne de régression à mon graphique linéaire dans Seaborn ?

Oui, vous pouvez ajouter une ligne de régression à votre graphique linéaire dans Seaborn en utilisant la fonction regplot(), qui ajuste et trace un modèle de régression linéaire entre deux variables.

Comment enregistrer mon tracé de ligne Seaborn dans un fichier ?

Vous pouvez enregistrer votre tracé Seaborn dans un fichier en utilisant la fonction savefig() de la bibliothèque matplotlib, qui enregistre la figure actuelle dans un chemin d'accès et un format de fichier spécifiés.

Sujets