Visualisations simples
Streamlit intègre des fonctions de visualisation utilisables avec des DataFrames pandas, sans dépendance externe.
st.bar_chart() -- Graphique en barres
st.bar_chart() compare des catégories. Il attend un DataFrame ou une Series pandas :
import streamlit as st
import pandas as pd
df = pd.DataFrame({
"region": ["IDF", "PACA", "ARA", "Bretagne"],
"chiffre_affaires": [450000, 320000, 280000, 195000]
})
st.subheader("Chiffre d'affaires par région")
st.bar_chart(
df.set_index("region")["chiffre_affaires"],
use_container_width=True
)
set_index() est le point clé : Streamlit utilise l'index du DataFrame comme axe horizontal. Sans set_index(), l'axe afficherait des indices numériques (0, 1, 2, 3) au lieu des noms de régions.
use_container_width
use_container_width=True fait occuper au graphique toute la largeur du conteneur parent.
st.line_chart() -- Graphique en lignes
st.line_chart() visualise des évolutions temporelles. Même principe : l'index sert d'axe horizontal.
df_mensuel = pd.DataFrame({
"mois": ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun"],
"ventes": [120, 135, 148, 142, 165, 178]
})
st.subheader("Évolution des ventes mensuelles")
st.line_chart(
df_mensuel.set_index("mois")["ventes"],
use_container_width=True
)
Pour afficher plusieurs séries sur le même graphique, passez un DataFrame avec plusieurs colonnes :
df_multi = pd.DataFrame({
"mois": ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun"],
"ventes_2023": [120, 135, 148, 142, 165, 178],
"ventes_2024": [130, 145, 160, 155, 180, 195]
})
st.line_chart(df_multi.set_index("mois"), use_container_width=True)
Streamlit attribue une couleur par colonne et affiche une légende.
st.area_chart() -- Graphique en aires
st.area_chart() fonctionne comme st.line_chart(), mais remplit la zone sous la courbe :
st.area_chart(
df_mensuel.set_index("mois")["ventes"],
use_container_width=True
)
Gérer les DataFrames vides
Avant d'afficher un graphique, vérifiez que le DataFrame contient des données. Un DataFrame vide produit un graphique vide sans indication :
if not df_regions.empty:
st.bar_chart(
df_regions.set_index("region")["chiffre_affaires"],
use_container_width=True
)
else:
st.info("Aucune donnée disponible pour les filtres sélectionnés.")
Toujours vérifier df.empty
Avec des filtres, certaines combinaisons ne retournent aucun résultat. Sans cette vérification, l'utilisateur voit un espace vide sans explication.
Limites des graphiques natifs
Les fonctions st.bar_chart(), st.line_chart() et st.area_chart() sont pratiques pour du prototypage, mais elles ont des limites :
| Fonctionnalité | Graphiques natifs | Plotly (Séance 3) |
|---|---|---|
| Titre du graphique | Non (utiliser st.subheader) | Oui, intégré |
| Labels des axes | Non configurables | Entièrement configurables |
| Info-bulles au survol | Basiques (valeur brute) | Personnalisables |
| Types de graphiques | Barres, lignes, aires | Barres, lignes, camemberts, scatter, heatmaps... |
| Couleurs | Automatiques, non modifiables | Entièrement personnalisables |
| Animations | Non | Oui |
Pour aller plus loin, Plotly via st.plotly_chart() offre un contrôle total :
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)
Plotly sera approfondi en Séance 3. Les graphiques natifs suffisent pour un premier dashboard.
Pourquoi utilise-t-on df.set_index('region') avant de passer le DataFrame à st.bar_chart() ?
Quelle est la principale limitation des graphiques natifs Streamlit par rapport à Plotly ?
À retenir
Points clés
st.bar_chart(),st.line_chart()etst.area_chart()produisent des graphiques en quelques lignes- Utilisez
set_index()pour définir l'axe horizontal des graphiques - Vérifiez toujours
df.emptyavant d'afficher un graphique - Les graphiques natifs suffisent pour un premier dashboard
- Pour des visualisations personnalisées (titres, couleurs, interactions), passez à Plotly (Séance 3)