Facile

Panorama des bibliothèques de visualisation Python

Où se situe Plotly Express dans l'écosystème Python de la visualisation, et pourquoi ce choix pour des dashboards web ?

Matplotlib — la référence historique

Matplotlib est la bibliothèque de visualisation Python la plus ancienne et la plus répandue. Vous l'avez probablement croisée dans vos cours de data. Son API est verbeuse et ses graphiques sont statiques par défaut — peu adaptée aux dashboards web interactifs.

Un bar chart avec Matplotlib :

python
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10, 5))
ax.bar(df["region"], df["chiffre_affaires"], color="steelblue")
ax.set_xlabel("Région")
ax.set_ylabel("CA (€)")
ax.set_title("Chiffre d'affaires par région")
ax.tick_params(axis='x', rotation=45)
plt.tight_layout()
st.pyplot(fig)

Intégration dans Streamlit : st.pyplot(fig). Ça fonctionne, mais le résultat est une image statique — pas de zoom, pas de hover, pas d'interactivité.

Plotly et Plotly Express

Plotly est une bibliothèque de visualisation open-source orientée web. Ses graphiques sont interactifs par défaut : hover pour voir les valeurs, zoom, pan, téléchargement en PNG, affichage/masquage de séries.

Plotly se présente en deux niveaux d'API :

Plotly Graph Objects (plotly.graph_objects)Plotly Express (plotly.express)
VerbositéÉlevée, contrôle finFaible, une ligne par graphique
FlexibilitéMaximaleSuffisante pour 95 % des cas
Courbe d'apprentissageRaideQuasi-immédiate
Usage recommandéPersonnalisation avancéeDashboard standard

Ce cours utilise Plotly Express (px). Le même bar chart :

python
import plotly.express as px

fig = px.bar(df, x="region", y="chiffre_affaires", title="CA par région")
st.plotly_chart(fig, use_container_width=True)

Deux lignes au lieu de huit, et le résultat est interactif.

Pourquoi Plotly Express plutôt qu'Altair ?

Altair est une autre bibliothèque populaire. Elle repose sur le modèle grammar-of-graphics (via Vega-Lite) — un paradigme déclaratif où l'on décrit ce que le graphique doit représenter plutôt que comment le construire.

python
# Altair — grammar-of-graphics
import altair as alt

chart = alt.Chart(df).mark_bar().encode(
    x="region:N",
    y="chiffre_affaires:Q",
    color="region:N"
).properties(title="CA par région")
python
# Plotly Express — approche directe
import plotly.express as px

fig = px.bar(df, x="region", y="chiffre_affaires", color="region", title="CA par région")

Les deux produisent un bar chart interactif. Mais les philosophies divergent :

AltairPlotly Express
ParadigmeGrammar-of-graphics (Vega-Lite)API impérative simplifiée
SyntaxeChaînage .mark_bar().encode()Appel unique px.bar(df, x=..., y=...)
Courbe d'apprentissageNouveau paradigme à apprendre (:N, :Q, :T)Proche de pandas — familière immédiatement
PersonnalisationVia Vega-Lite JSON (moins direct)Via update_layout() / update_traces() (Python natif)
Intégration Streamlitst.altair_chart(chart)st.plotly_chart(fig) — événements on_select supportés

Pourquoi Plotly Express ici

Altair est une bonne bibliothèque, mais son modèle déclaratif représente un changement de paradigme par rapport à pandas. Avec Plotly Express, vous passez un DataFrame, vous spécifiez les colonnes, c'est fait. Pas de notation :N / :Q, pas de chaînage mark_*().encode().

Installation

Plotly n'est pas inclus dans l'installation de base de Python :

bash
pip install plotly

Souvent déjà présent si vous avez installé Streamlit — vérifiez avec :

bash
pip show plotly

Si la commande affiche la version installée (5.x ou supérieure), vous êtes prêt.

Quelle est la principale différence entre Matplotlib et Plotly dans un contexte Streamlit ?

Pourquoi ce cours utilise-t-il Plotly Express plutôt que Plotly Graph Objects ?

À retenir

Points clés

  • Matplotlib : verbeux et statique — adapté aux publications académiques, pas aux dashboards web
  • Plotly Express : interactif par défaut, syntaxe concise, intégration native Streamlit
  • Plotly Graph Objects : le niveau bas de Plotly, pour les personnalisations poussées
  • Altair : paradigme grammar-of-graphics — changement de paradigme non nécessaire ici
  • Installation : pip install plotly, vérification : pip show plotly