Personnalisation et rendu professionnel
Un graphique brut Plotly Express est fonctionnel, mais rarement prêt pour un dashboard soigné. Cette page couvre les techniques de personnalisation du rendu.
update_layout — la structure du graphique
update_layout() modifie les éléments structurels du graphique : titre, police, couleur de fond, marges, légende, hauteur.
fig.update_layout(
title={"text": "Chiffre d'affaires par région", "font": {"size": 18}},
font={"family": "Arial", "size": 13},
plot_bgcolor="rgba(0,0,0,0)",
paper_bgcolor="rgba(0,0,0,0)",
margin={"l": 40, "r": 20, "t": 60, "b": 40},
legend={"orientation": "h", "yanchor": "bottom", "y": -0.3},
height=400
)
Détail des paramètres :
| Paramètre | Rôle |
|---|---|
title | Titre du graphique avec options de style (taille, police, position) |
font | Police par défaut pour tout le graphique |
plot_bgcolor | Couleur de fond de la zone de traçage (derrière les barres/courbes) |
paper_bgcolor | Couleur de fond de la zone totale (derrière le titre, la légende) |
margin | Marges internes (l=gauche, r=droite, t=haut, b=bas) |
legend | Position et orientation de la légende |
height | Hauteur du graphique en pixels |
plot_bgcolor vs paper_bgcolor
Ces deux paramètres sont souvent confondus. plot_bgcolor contrôle le fond de la zone où les données sont tracées (le rectangle intérieur). paper_bgcolor contrôle le fond de tout le reste (titre, légende, marges). Pour un rendu transparent dans Streamlit, mettez les deux à "rgba(0,0,0,0)".
Quelle est la différence entre plot_bgcolor et paper_bgcolor dans update_layout() ?
update_traces — les éléments de données
update_traces() modifie l'apparence des éléments de données eux-mêmes : couleur des barres, épaisseur des lignes, format du hover.
Personnaliser les barres
fig.update_traces(
marker_color="#1f77b4",
marker_line_color="#0a3d62",
marker_line_width=1.5
)
Ce code applique une couleur de remplissage bleue, un contour bleu foncé et une épaisseur de contour de 1.5 px à toutes les barres.
Personnaliser les lignes
fig.update_traces(
line={"width": 2.5, "dash": "solid"},
mode="lines+markers"
)
Les valeurs possibles pour dash : "solid", "dot", "dash", "longdash", "dashdot".
Personnaliser le hover
Le hover par défaut affiche les coordonnées x et y. Pour un rendu plus professionnel, utilisez hovertemplate :
fig.update_traces(
hovertemplate="<b>%{x}</b><br>CA : %{y:,.0f} €<extra></extra>"
)
Détail de la syntaxe :
%{x}— valeur de l'axe X%{y:,.0f}— valeur de l'axe Y formatée avec séparateur de milliers et 0 décimale<b>...</b>— texte en gras<br>— retour à la ligne<extra></extra>— masque le texte secondaire (trace name) qui apparaît par défaut
hovertemplate
Un hover brut affiche « region=IDF, chiffre_affaires=1250000 ». Avec un template personnalisé, on obtient « IDF — CA : 1 250 000 € ». Peu d'effort, grosse différence de lisibilité.
Que fait la balise <extra></extra> dans un hovertemplate Plotly ?
Couleurs cohérentes
Dans un dashboard avec plusieurs graphiques, la cohérence des couleurs compte. Définissez une palette centralisée et réutilisez-la :
COULEURS = {
"primaire": "#1f77b4",
"secondaire": "#ff7f0e",
"positif": "#2ca02c",
"negatif": "#d62728",
"palette": ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd"]
}
Application sur les graphiques :
fig_bar = px.bar(df, x="region", y="ca", color_discrete_sequence=COULEURS["palette"])
fig_line = px.line(df, x="mois", y="ca", color_discrete_sequence=[COULEURS["primaire"]])
color_discrete_sequence
Ce paramètre accepte une liste de couleurs, même pour une seule série. N'oubliez pas les crochets : color_discrete_sequence=[COULEURS["primaire"]] (liste d'un élément), pas color_discrete_sequence=COULEURS["primaire"] (chaîne).
Compatibilité avec le thème Streamlit
Streamlit supporte le mode clair et le mode sombre. Pour que vos graphiques s'intègrent correctement dans les deux modes, deux approches :
Fond transparent (recommandé)
fig.update_layout(
plot_bgcolor="rgba(0,0,0,0)",
paper_bgcolor="rgba(0,0,0,0)"
)
Le graphique hérite du fond de la page Streamlit, quel que soit le thème.
Template Plotly
Plotly propose des templates prédéfinis qui s'adaptent à différents contextes :
fig = px.bar(df, x="region", y="ca", template="plotly_white")
Les templates disponibles : "plotly" (défaut), "plotly_white", "plotly_dark", "simple_white", "ggplot2", "seaborn".
Recommandation
Pour un dashboard Streamlit, fond transparent + police par défaut suffit. Le graphique s'adapte au thème sans code conditionnel. Si vous préférez un template, "plotly_white" est le plus neutre.
Factoriser la personnalisation
Avec plusieurs graphiques, la personnalisation se répète. Factorisez-la dans une fonction :
def style_figure(fig, height=400):
"""Applique le style standard à une figure Plotly."""
fig.update_layout(
font={"family": "Arial", "size": 13},
plot_bgcolor="rgba(0,0,0,0)",
paper_bgcolor="rgba(0,0,0,0)",
margin={"l": 40, "r": 20, "t": 60, "b": 40},
height=height
)
fig.update_traces(
hovertemplate="<b>%{x}</b><br>%{y:,.0f}<extra></extra>"
)
return fig
# Utilisation
fig = px.bar(df, x="region", y="ca", title="CA par région")
fig = style_figure(fig)
st.plotly_chart(fig, use_container_width=True)
Quelle est la meilleure approche pour que les graphiques Plotly s'adaptent au mode clair et sombre de Streamlit ?
À retenir
Points clés
update_layout()modifie la structure : titre, police, fond, marges, légende, hauteurupdate_traces()modifie les données : couleurs, épaisseur, hoverhovertemplatea un fort impact sur la lisibilité — personnalisez-le systématiquement- Définissez une palette de couleurs centralisée et réutilisez-la dans tous les graphiques
- Fond transparent (
rgba(0,0,0,0)) pour s'adapter automatiquement au thème Streamlit - Factorisez la personnalisation dans une fonction utilitaire