import pandas as pd
import plotly.express as px
import plotly.io as pio
# Définir un thème par défaut pour tous les graphiques
pio.templates.default = "plotly_white"
1 Introduction : Au-delà des Graphiques Statiques
Après avoir maîtrisé les graphiques statiques avec Matplotlib et Seaborn, il est temps de franchir une nouvelle étape : l’interactivité. Plotly Express est une bibliothèque de haut niveau qui rend la création de visualisations interactives, riches et prêtes pour le web incroyablement simple et rapide.
Pourquoi Plotly Express est un incontournable ?
- Interactivité Native : Le zoom, le déplacement, et l’affichage d’informations au survol (
hover) sont intégrés par défaut, sans aucune configuration. - Syntaxe Concise et Expressive : Une seule ligne de code peut générer un graphique qui en nécessiterait des dizaines avec d’autres outils.
- Idéal pour le Reporting Moderne : Puisque vous utilisez Quarto, sachez que les graphiques Plotly s’intègrent parfaitement dans vos documents HTML, produisant des widgets interactifs que vos lecteurs peuvent explorer, contrairement aux images statiques.
1.1 La Grammaire de Plotly Express
La philosophie de Plotly Express est simple et puissante : chaque fonction (px.scatter, px.bar, etc.) correspond à un type de graphique. Vous lui fournissez votre DataFrame, puis vous mappez les colonnes de vos données aux attributs visuels du graphique (x, y, color, size, facet_col, animation_frame…).
2 Partie 1 : De la Donnée au Graphique Interactif
Le point de départ est toujours un DataFrame bien structuré.
# Plotly Express vient avec d'excellents jeux de données
df_gap = px.data.gapminder()
df_2007 = df_gap.query("year==2007")La magie opère avec une seule fonction. Notez que chaque fonction px renvoie un objet Figure. C’est cet objet que nous pouvons ensuite manipuler et afficher.
# La syntaxe est simple : dataframe, puis le mapping des colonnes
fig = px.scatter(
data_frame=df_2007,
x="gdpPercap",
y="lifeExp",
hover_name="country", # Ce qui s'affiche en grand au survol
title="Espérance de vie vs PIB par habitant (2007)"
)
fig.show()Explorez-le ! Passez votre souris sur les points, zoomez sur une région, double-cliquez pour revenir à la vue initiale.
3 Partie 2 : Enrichir la Vue avec les Attributs Visuels
La véritable puissance de Plotly Express est sa capacité à encoder de multiples dimensions d’analyse dans un seul graphique de manière intuitive.
Ajouter Couleur, Taille et Facettes
color: Idéal pour une variable catégorielle.size: Idéal pour une variable numérique.facet_col/facet_row: Pour créer automatiquement une grille de sous-graphiques basée sur une catégorie.
fig = px.scatter(
data_frame=df_2007,
x="gdpPercap",
y="lifeExp",
color="continent",
size="pop",
hover_name="country",
facet_col="continent", # Crée une colonne de graphiques par continent
facet_col_wrap=3, # Nombre de colonnes avant de passer à la ligne suivante
log_x=True,
size_max=60
)
fig.update_layout(title_text="Santé et Richesse Mondiale (2007), par Continent")
fig.show()4 Partie 3 : Un Tour d’Horizon des Graphiques Essentiels
La syntaxe reste cohérente quel que soit le type de graphique, ce qui rend l’apprentissage très rapide.
| Fonction | Utilité |
|---|---|
px.scatter |
Relation entre deux variables numériques. |
px.line |
Évolution d’une variable dans le temps. |
px.bar |
Comparaison d’une valeur numérique entre catégories. |
px.histogram |
Distribution d’une variable numérique. |
px.box |
Comparaison de distributions entre catégories. |
px.choropleth |
Visualisation de données sur une carte. |
Exemple : Un graphique en lignes (px.line)
# Évolution de la population au Canada
df_can = df_gap.query("country=='Canada'")
fig = px.line(df_can, x="year", y="pop", title="Évolution de la Population au Canada")
fig.show()5 Partie 4 : Peaufiner vos Créations (Customisation)
L’objet fig que retournent les fonctions px est votre porte d’entrée vers une personnalisation infinie via ses méthodes update_layout() et update_traces().
update_layout(): Modifie les éléments “conteneurs” : titre, labels des axes, légende, polices, couleurs de fond…update_traces(): Modifie les données elles-mêmes : style des marqueurs, mode des lignes (continues, pointillées)…
fig = px.bar(
df_2007.groupby('continent')['pop'].sum().reset_index(),
x="continent",
y="pop",
title="Population par Continent en 2007" # Un titre temporaire
)
# Appliquons des personnalisations
fig.update_layout(
title_text="<b>Population Mondiale par Continent (2007)</b>", # Titre en gras
xaxis_title="Continent",
yaxis_title="Population (en milliards)",
font_family="Arial",
title_font_color="RebeccaPurple",
template="simple_white" # Appliquer un thème sobre
)
fig.update_traces(marker_color='lightseagreen', marker_line_width=1.5)
fig.show()6 Partie 5 : L’Effet “Wow” - Animations et Cartes
Animations : Raconter une Histoire dans le Temps
Le paramètre animation_frame transforme un graphique statique en une histoire dynamique.
fig = px.scatter(
df_gap, # On utilise le DataFrame complet
x="gdpPercap", y="lifeExp",
color="continent", size="pop",
hover_name="country", log_x=True,
animation_frame="year", # L'attribut magique pour l'animation
animation_group="country", # Lie les points à travers le temps
range_y=[25, 90], range_x=[100, 100000],
labels={"pop": "Population", "gdpPercap": "PIB/hab.", "lifeExp": "Espérance de Vie"}
)
fig.update_layout(title_text="L'Évolution de la Santé et de la Richesse Mondiale (1952-2007)")
fig.show()Cartes Choroplèthes : La Dimension Géographique
Si vos données contiennent des codes pays (ISO-3), px.choropleth les projettera sur une carte du monde.
fig = px.choropleth(
df_2007,
locations="iso_alpha", color="lifeExp",
hover_name="country",
color_continuous_scale=px.colors.sequential.Viridis,
title="Espérance de Vie dans le Monde (2007)"
)
fig.show()6.1 Atelier Pratique Final : Tableau de Bord sur les Pourboires
Objectif : Utiliser la puissance de Plotly Express pour créer une visualisation d’analyse complète du jeu de données tips.
Chargement :
df_tips = px.data.tips().Visualisation : Créez un
px.scatterdetotal_billvstip.Ajoutez des dimensions :
color="sex"facet_row="smoker"facet_col="day"
Ajoutez des graphiques marginaux pour voir les distributions :
marginal_x="box"marginal_y="violin"
Améliorez le style :
- Donnez un titre clair.
- Appliquez un template de votre choix (ex:
template="plotly_dark").
Cette seule ligne de code vous donnera un tableau de bord incroyablement riche et interactif, démontrant toute la puissance de la grammaire de Plotly Express.