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 :
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 fin | Faible, une ligne par graphique |
| Flexibilité | Maximale | Suffisante pour 95 % des cas |
| Courbe d'apprentissage | Raide | Quasi-immédiate |
| Usage recommandé | Personnalisation avancée | Dashboard standard |
Ce cours utilise Plotly Express (px). Le même bar chart :
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.
# 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")
# 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 :
| Altair | Plotly Express | |
|---|---|---|
| Paradigme | Grammar-of-graphics (Vega-Lite) | API impérative simplifiée |
| Syntaxe | Chaînage .mark_bar().encode() | Appel unique px.bar(df, x=..., y=...) |
| Courbe d'apprentissage | Nouveau paradigme à apprendre (:N, :Q, :T) | Proche de pandas — familière immédiatement |
| Personnalisation | Via Vega-Lite JSON (moins direct) | Via update_layout() / update_traces() (Python natif) |
| Intégration Streamlit | st.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 :
pip install plotly
Souvent déjà présent si vous avez installé Streamlit — vérifiez avec :
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