Exporter automatiquement une série de graphiques par entité avec QGIS et Python (sans Data Plotly)

Dans nos précédents articles, nous avons vu comment créer des graphiques dans QGIS avec Data Plotly. Aujourd’hui, nous allons aller plus loin : automatiser la génération d’un graphique par plage (ou toute autre entité), en exportant les résultats sous forme d’images PNG, prêtes à insérer dans un rapport.

Et bonne nouvelle : pas besoin de coder un plugin, nous allons utiliser la console Python de QGIS, avec pandas et plotly.



Objectif

Créer automatiquement :

  • Un graphique par plage, montrant la quantité de déchets par type
  • Un fichier image PNG par graphique
  • Sans clics répétés ni manipulation manuelle


Exemple utilisé

Nous avons une couche de relevés de déchets sur les plages, avec les champs :

  • plage : nom de la plage
  • type_dechet : type (plastique, métal…)
  • quantite : nombre d’objets relevés


Le script Python dans QGIS

Voici un script que vous pouvez copier dans la console Python de QGIS :

import os
import pandas as pd
import plotly.express as px

# Dossier de sortie
output_folder = "C:/temp/export_graphiques"
os.makedirs(output_folder, exist_ok=True)

# Couche active
layer = iface.activeLayer()

# Extraction des données
data = []
for f in layer.getFeatures():
    data.append({
        "plage": f["plage"],
        "type_dechet": f["type_dechet"],
        "quantite": f["quantite"]
    })

# Convertir en DataFrame
df = pd.DataFrame(data)

# Générer un graphique par plage
for plage, group in df.groupby("plage"):
    fig = px.bar(
        group,
        x="type_dechet",
        y="quantite",
        title=f"Déchets par type – {plage}",
        labels={"quantite": "Quantité", "type_dechet": "Type de déchet"},
        color="type_dechet"
    )
    fig.update_layout(showlegend=False)
    fig.write_image(os.path.join(output_folder, f"graph_{plage}.png"))

print("✅ Graphiques exportés dans :", output_folder)


Prérequis

Pour que le script fonctionne, vérifiez que :

  • Votre environnement Python de QGIS contient pandas , plotly et kaleido
  • Sinon, vous pouvez l’installer via l’invite de commande : C:\OSGeo4W\OSGeo4W.bat > python3 -m pip install pandas plotly kaleido


Personnalisation

Vous pouvez modifier :

  • Le champ de regroupement ("plage") pour faire des graphiques par commune, par date, etc.
  • Le type de graphique : utilisez px.pie, px.line, px.histogram


Résultat attendu

Dans votre dossier, vous obtiendrez :

graph_Anse_Mourouk.png
graph_Pointe_Coton.png
graph_Graviers.png
...

Chaque image correspond à une plage, avec un graphique clair et prêt à être inséré dans un rapport ou un atlas.

Si vous modifiez le code pour produire des camemberts:

import plotly.express as px
import os

for plage, group in df.groupby("plage"):
fig = px.pie(
group,
names="type_dechet", # valeurs catégorielles
values="quantite", # valeurs quantitatives
title=f"Répartition des déchets – {plage}",
color="type_dechet"
)
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.write_image(os.path.join(output_folder, f"graph_{plage}.png"))


Vous obtenez:

En résumé

Même si Data Plotly est pratique pour créer des graphiques dans QGIS, il n’est pas scriptable en Python. En revanche, en extrayant les données et en utilisant plotly, vous bénéficiez :

  • d’un contrôle total,
  • d’un script réutilisable,
  • de visuels professionnels.


À venir…

Dans un prochain article, nous verrons comment intégrer automatiquement ces graphiques dans un Atlas QGIS, pour créer des rapports PDF entièrement personnalisés.


Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *