---
title: "Production énergétique par déchets méthanisables"
subtitle: "Production électrique, vente de chaleur et injection de biométhane dans le réseau, Vaud"
lang: fr
author: "DGE-DIREN"
date: last-modified # Renvoie automatiquement la date de dernière modification du .qmd
params: # ! `open_params_metadata_help()` pour des instructions de remplissage détaillées
fonction: 3 # Valeur numérique : 0=Non-défini/1=Description/2=Orientation/3=Pilotage
nature: 2 # Valeur numérique : 0=Non-défini/1=Actions/2=Effets/3=Impacts
idThematique: 08.02.05.73 # Identifiant selon nomenclature obsind theme/sous-theme/objet/id (p.ex. 08.03.01)
niveauPublication: 2 # Valeur numérique : 0=Non-défini/1=Interne/2=Public. Tout autre choix génère un avertissement
niveauDetail: Canton # Texte libre qui indique le niveau minimal d'agrégation disponible pour l'indicateur (canton, commune, région, installation, véhicule, etc.)
frequenceMAJ: Annuel # Texte libre, idéalement à choisir parmi les codes suivants : mensuel/semestriel/annuel/biannuel/mensuel/tous les x ans/non-défini
moisMAJ: 9 # Valeur numérique : 0=Non-défini/1=Janvier/2=Février, etc.
disponibleDepuis: 2015 # Valeur numérique Année (aaaa) (p.ex. 2000)
personneReference: Steve Ducommun # Prénom+Nom de la personne référente de l'indicateur
mailReference: null # E-mail ACV (générique ou nominal, se terminant par @vd.ch)
uuid: 7522abbb-1f0c-4b41-9122-71c146d5ba33 # !NE PAS MODIFIER! Identifiant unique généré automatiquement à la création de la fiche
uuidParent: null # Identifiant(s) unique(s) des indicateurs parents de l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
uuidEnfant: null # Identifiant(s) unique(s) des indicateurs enfants de l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
uuidConnexe: null # Identifiant(s) unique(s) des indicateurs connexes à l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
majCatalogue: 1 # Valeur numérique : 0=Non/1=Oui pour mettre à jour les métadonnées dans le catalogue des indicateurs (connexion au disque partagé ObsInd requise)
format:
html:
other-links: # Copier la structure ci-dessous pour remplacer/ajouter d'autres liens sous la table des matières
- text: Infos statistiques énergie
href: 'https://www.vd.ch/environnement/energie/chiffres-cles-et-statistiques-energie-vaud/'
target: '_blank'
- text: Profil climatique communes
href: 'https://stat-climat-vd.ch/profil-climat/'
target: '_blank'
- text: Direction de l'énergie
href: 'https://www.vd.ch/djes/dge/dge-diren'
target: '_blank'
metadata-files: # Ne pas supprimer !
- assets/format-options.yml
editor_options:
chunk_output_type: console
---
<!-- Les métadonnées ci-dessus doivent être remplies pour chaque fiche. Lorsqu'un champ n'est disponible, il est possible d'écrire "" ou NULL -->
<!-- Aide au remplissage : `obsindVD::open_aide_remplissage_help()` (lancer la ligne de code dans la console) -->
```{r setup}
#| echo: false
#| warning: false
#| message: false
#| results: asis
# version: 1.2.2 (01.09.2026)
# -----------------------------------------------------------------------------
# Ne rien modifier dans ce bloc de code !
# Ce bloc doit être lancé pour charger les métadonnées dans l'environnement !
# -----------------------------------------------------------------------------
# update_model_setup_code() pour mettre à jour ce bloc avec la version du dernier modèle
# Chargement (ou installation) des librairies disponibles sur CRAN
if (!require("pacman")) install.packages("pacman")
pacman::p_load(tidyverse, readxl, glue, gt, DT, ggiraph, scales, ggtext)
# Chargement de la librairie obsindVD privée
# Pour l'installation : suivre les instructions dans le BitBucket : https://dsigit.etat-de-vaud.ch/outils/git/projects/DGE/repos/obsind/
# Si l'accès n'est pas autorisé, faire une demande à l'Observatoire des indicateurs
library(obsindVD)
# Par défaut : ouvrir l'aide obsindVD (supprimer cette ligne si superflu)
open_fiche_quarto_help()
# Vérifie, ajoute et insère des valeurs par défaut pour les métadonnées manquantes (en-tête YAML)
complete_metadata_params()
# Extraction + validation des métadonnées (en-tête YAML)
selected_metadata <- return_selected_metadata()
# Ajout de l'identifiant dans les en-têtes du document html
display_identifiant(value = selected_metadata[['Identifiant thématique']])
```
::: {.callout-tip .narrow icon="false" collapse="true"}
# Métadonnées de l'indicateur
```{r}
# --------------------------------------
# Présentation des métadonnées ----
# --------------------------------------
tidyr::tibble(
`Attribut` = names(selected_metadata),
`Valeur` = selected_metadata
) |>
gt_table_ind()
```
:::
```{r}
# Préciser quelle est l'année maximale recherchée (permet d'automatiser la recherche du bon dossier et fichier pour les données PRONOVO)
an_max <- 2025
```
```{r}
# ---------------------------------------------------------
# Tableau de synthèse ----
# ---------------------------------------------------------
# Pour de l'aide sur comment remplir ce tableau de synthèse lancer la commande suivante dans la console :
# obsindVD::open_tableau_synthese_help()
# Pour afficher l'aide spécifique à une fonction, ajouter '?' avant l'appel de la fonction :
# ?icon_up()
tableau_synthese <- list(
# Premier indicateur... attention à la structure !
list(
titre_indicateur = "Production <b>électrique</b> à partir de déchets méthanisables, Vaud <b>[GWh]</b>",
valeur_2025 = 10.3,
obj_2030 = 11, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 13,
tendance_observée = icon_down(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = icon_sad() # icon_happy(), icon_meh(), icon_sad() "..."
),
# Second indicateur... Répliquer la même structure autant de fois que d'indicateurs à afficher dans le tableau de synthèse
list(
titre_indicateur = "Vente de <b>chaleur</b> à partir de déchets méthanisables, Vaud <b>[GWh]</b>",
valeur_2025 = "3.0",
obj_2030 = 12, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 14,
tendance_observée = icon_down(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = icon_sad() # icon_happy(), icon_meh(), icon_sad()
),
# Troisième indicateur... Répliquer la même structure autant de fois que d'indicateurs à afficher dans le tableau de synthèse
list(
titre_indicateur = "Injection de <b>biométhane</b> à partir de déchets méthanisables, Vaud <b>[GWh]</b>",
valeur_2025 = "23.0",
obj_2030 = 25, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 30,
tendance_observée = icon_up(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = icon_happy() # icon_happy(), icon_meh(), icon_sad()
)
)
# Impression du tableau de synthèse
print_tableau_synthese(tableau_synthese) # Le résultat peut être customisé comme un objet {gt}
```
# Description {#sec-description}
Cet indicateur informe sur la valorisation énergétique du biogaz obtenu par la méthanisation de matières organiques: production électrique (électricité autoconsommée et injectée dans le réseau), vente de chaleur à des tiers et injection de biométhane dans le réseau de gaz. Il traduit l’évolution de la production locale d’énergie à partir de déchets méthanisables.
Les déchets méthanisables sont des matières organiques biodégradables (ex: déchets agroalimentaire, déchets ménagers organiques) susceptibles d'être dégradées par des micro-organismes afin de produire du biogaz.
# Cadre de référence {#sec-cadre-reference}
Les objectifs de la production énergétique à partir de déchets méthanisables sont définis dans la Conception cantonale de l’énergie ([CoCEn 2019](https://www.vd.ch/fileadmin/user_upload/themes/environnement/energie/fichiers_pdf/CoCEn_Pub_complete_20190816.pdf)). L’objectif est d’atteindre dès 2030 une production annuelle électrique de 11 GWh<sub>él</sub>, de vente de chaleur de 12 GWh<sub>th</sub> et d'injection de biométhane de 25 GWh<sub>th</sub>. Pour 2050 les objectifs sont respectivement de 13, 14 et 30 GWh.
# Graphique {#sec-graphique}
```{r}
# Lecture des données
#--------------------------------------------------------------------------
# 1 - Données de production
#Les données du document data_brut.xlsx doit avoir été préparé
data_brut_read <- readxl::read_excel(("./data/data_brut.xlsx"),
sheet = "data_final")
data_long <- data_brut_read |>
pivot_longer(
cols = -1, # toutes les colonnes sauf la 1ère
names_to = "ANNEE",
values_to = "VALEUR"
)
# ---------------------------------------------------------
# 2 - Objectifs CoCEn
# A créer une fois
# # obj_electrique : objectifs de production électrique à partir de déchets incinérables
# obj_electrique <- tibble(
# ANNEE = c(2030, 2050),
# GWH = c(11, 13)
# )
# write_delim(obj_electrique,"./data/obj_electrique.csv", delim = ";")
#
# # obj_thermique : objectifs de production thermique à partir de déchets incinérables
# obj_thermique <- tibble(
# ANNEE = c(2030, 2050),
# GWH = c(12, 14)
# )
# write_delim(obj_thermique,"./data/obj_thermique.csv", delim = ";")
#
# # obj_biogaz : objectifs de production thermique à partir de déchets incinérables
# obj_biogaz <- tibble(
# ANNEE = c(2030, 2050),
# GWH = c(25, 30)
# )
# write_delim(obj_biogaz,"./data/obj_biogaz.csv", delim = ";")
obj_electrique <- read_delim("./data/obj_electrique.csv", delim = ";")
obj_thermique <- read_delim("./data/obj_thermique.csv", delim = ";")
obj_biogaz <- read_delim("./data/obj_biogaz.csv", delim = ";")
# # ---------------------------------------------------------
# # 4 - Population
#
# # Variables sont : ANNEE et HABITANTS
#
# tryCatch(
# expr = {
# read_delim("P:/DIREN/02 PILOTAGE DIREN/02.11 Bases de donnees/POPULATION/04_extractions_traitees/population.csv", delim=";") |>
# write_delim("./data/population.csv", delim = ";")
# },
# error = function(e) message("Attention: la table population n'a pas pu être réactualisée avec les données brutes du P:/ ", e$message)
# )
#
# population <- read_delim("./data/population.csv", delim = ";") |>
# filter(ANNEE >= 2015 & ANNEE <= an_max)
```
```{r }
#| label: fig-G1
##| fig-cap: "Production électrique à partir de déchets méthanisables, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
# Graphique Production ELECTRIQUE
# créer data ressources
ressources <- data_long |>
# ne garder que production d'Electricité
filter(VARIABLES == "Electrique") |>
rename(GWH = VALEUR) |>
mutate(ANNEE = as.numeric(ANNEE))
# créer data objectifs (uniquement objectifs des totaux)
objectifs <- obj_electrique |>
mutate(ANNEE = as.numeric(ANNEE))
# Ajouter un trou pour séparer les consommations des objectifs
last_year <- max(ressources$ANNEE, na.rm = TRUE)
gap1 <- last_year + 1 # entre dernière année et 2030
gap2 <- 2030 + 1 # entre 2030 et 2050
annees_hist <- sort(unique(ressources$ANNEE))
annees_levels <- c(
annees_hist,
gap1,
2030,
gap2,
2050
)
# Ajout les trous à chaque dataset
add_missing_years_prod <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels,
VARIABLES
)
}
add_missing_years_simple <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels
)
}
ressources <- add_missing_years_prod(ressources) |>
mutate(GWH = tidyr::replace_na(GWH, 0))
objectifs <- add_missing_years_simple(objectifs)
# ordrer les ressources selon la quantité
ordre_type <- ressources |>
filter(ANNEE == last_year) |>
arrange(GWH) |>
pull(VARIABLES)
tous_les_types <- c("Objectifs CoCEn 2019", ordre_type)
annees_labels <- as.character(annees_levels)
ressources <- ressources |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor(as.character(VARIABLES), levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
objectifs <- objectifs |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor("Objectifs CoCEn 2019", levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
g1_plot <- ggplot() +
# Bars (objectives )
geom_col_interactive(
data = objectifs,
aes(x = ANNEE, y = GWH, fill = VARIABLES,
tooltip = paste0("Objectifs de production électrique", " ", ANNEE, " : ", round(GWH, 0), " GWh"),
data_id = as.character(ANNEE)),
width = 0.7,
color = NA
) +
geom_col_interactive(
data = ressources,
aes(
x = ANNEE,
y = GWH,
fill = VARIABLES,
tooltip =paste0("Production électrique à partir de déchets méthanisables en ", ANNEE, " : ", round(GWH, 1), " GWh<sub>él</sub>"),
data_id = paste0(as.character(ANNEE), as.character(VARIABLES))),
width = 0.7,
position = "stack",
color = NA
) +
scale_fill_manual(
values = c(
"Electrique" ="yellow2",
"Objectifs CoCEn 2019" = "grey80"
),
breaks = c(
"Electrique",
"Objectifs CoCEn 2019"
),
labels = c(
"Electrique" ="Production électrique",
"Objectifs CoCEn 2019" = "Objectifs CoCEn 2019"
),
name = NULL
) +
guides(
fill = guide_legend(nrow = 1, byrow = FALSE)
)+
scale_y_continuous(
name = "Production d'électricité [GWh]",
labels = scales::label_number(big.mark = "'", decimal.mark = "."),
expand = expansion(mult = c(0, 0.1))
) +
scale_x_discrete(
drop = FALSE,
labels = function(x) {
num_x <- as.numeric(as.character(x))
ifelse(
num_x %in% c(gap1, gap2),
"", # cacher les gaps
ifelse(num_x %% 5 == 0, num_x, "") # afficher seulement tous les 5 ans
)
}
)+
# Titles and caption
labs(
title = str_wrap("**Production électrique à partir de déchets méthanisables, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
caption = "Source: Pronovo<br>Etat au 14.08.2026"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g1_plot,
# !!MWR : modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G1"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g1_Production_methanisable_electricite_2015-{an_max}.png"), width = 8, height = 6, dpi = 300)
```
```{r}
#| label: fig-G2
##| fig-cap: "Vente de chaleur à partir de déchets méthanisables, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
# Graphique Production THERMIQUE
# créer data ressources
ressources <- data_long |>
# ne garder que production thermique
filter(VARIABLES == "Thermique") |>
rename(GWH = VALEUR) |>
mutate(ANNEE = as.numeric(ANNEE))
# créer data objectifs (uniquement objectifs des totaux)
objectifs <- obj_thermique |>
mutate(ANNEE = as.numeric(ANNEE))
# Ajouter un trou pour séparer les consommations des objectifs
last_year <- max(ressources$ANNEE, na.rm = TRUE)
gap1 <- last_year + 1 # entre dernière année et 2030
gap2 <- 2030 + 1 # entre 2030 et 2050
annees_hist <- sort(unique(ressources$ANNEE))
annees_levels <- c(
annees_hist,
gap1,
2030,
gap2,
2050
)
# Ajout les trous à chaque dataset
add_missing_years_prod <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels,
VARIABLES
)
}
add_missing_years_simple <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels
)
}
ressources <- add_missing_years_prod(ressources) |>
mutate(GWH = tidyr::replace_na(GWH, 0))
objectifs <- add_missing_years_simple(objectifs)
# ordrer les ressources selon la quantité
ordre_type <- ressources |>
filter(ANNEE == last_year) |>
arrange(GWH) |>
pull(VARIABLES)
tous_les_types <- c("Objectifs CoCEn 2019", ordre_type)
annees_labels <- as.character(annees_levels)
ressources <- ressources |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor(as.character(VARIABLES), levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
objectifs <- objectifs |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor("Objectifs CoCEn 2019", levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
g2_plot <- ggplot() +
# Bars (objectives )
geom_col_interactive(
data = objectifs,
aes(x = ANNEE, y = GWH, fill = VARIABLES,
tooltip = paste0("Objectifs de production thermique", " ", ANNEE, " : ", round(GWH, 0), " GWh<sub>th</sub>"),
data_id = as.character(ANNEE)),
width = 0.7,
color = NA
) +
geom_col_interactive(
data = ressources,
aes(
x = ANNEE,
y = GWH,
fill = VARIABLES,
tooltip =paste0("Vente de chaleur à partir de déchets méthanisables en ", ANNEE, " : ", round(GWH, 1), " GWh<sub>th</sub>"),
data_id = paste0(as.character(ANNEE), as.character(VARIABLES))),
width = 0.7,
position = "stack",
color = NA
) +
scale_fill_manual(
values = c(
"Thermique" ="orange2",
"Objectifs CoCEn 2019" = "grey80"
),
breaks = c(
"Thermique",
"Objectifs CoCEn 2019"
),
labels = c(
"Thermique" ="Vente de chaleur",
"Objectifs CoCEn 2019" = "Objectifs CoCEn 2019"
),
name = NULL
) +
scale_y_continuous(
name = "Production thermique [GWh]",
labels = scales::label_number(big.mark = "'", decimal.mark = "."),
expand = expansion(mult = c(0, 0.1))
) +
scale_x_discrete(
drop = FALSE,
labels = function(x) {
num_x <- as.numeric(as.character(x))
ifelse(
num_x %in% c(gap1, gap2),
"", # cacher les gaps
ifelse(num_x %% 5 == 0, num_x, "") # afficher seulement tous les 5 ans
)
}
)+
# Titles and caption
labs(
title = str_wrap("**Vente de chaleur à partir de déchets méthanisables, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
caption = "Source: DGE-DIREN / DGE-GEODES<br>Etat au 14.08.2026"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g2_plot,
# !!MWR : modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G2"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g2_Production_methanisable_thermique_2015-{an_max}.png"), width = 8, height = 6, dpi = 300)
```
```{r}
#| label: fig-G3
##| fig-cap: "Injection de biométhane à partir de déchets méthanisables, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
# Graphique Production BIOGAZ injecté dans le réseau
# créer data ressources
ressources <- data_long |>
# ne garder que production de biogaz
filter(VARIABLES == "Biogaz") |>
rename(GWH = VALEUR) |>
mutate(ANNEE = as.numeric(ANNEE))
# créer data objectifs (uniquement objectifs des totaux)
objectifs <- obj_biogaz |>
mutate(ANNEE = as.numeric(ANNEE))
# Ajouter un trou pour séparer les consommations des objectifs
last_year <- max(ressources$ANNEE, na.rm = TRUE)
gap1 <- last_year + 1 # entre dernière année et 2030
gap2 <- 2030 + 1 # entre 2030 et 2050
annees_hist <- sort(unique(ressources$ANNEE))
annees_levels <- c(
annees_hist,
gap1,
2030,
gap2,
2050
)
# Ajout les trous à chaque dataset
add_missing_years_prod <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels,
VARIABLES
)
}
add_missing_years_simple <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels
)
}
ressources <- add_missing_years_prod(ressources) |>
mutate(GWH = tidyr::replace_na(GWH, 0))
objectifs <- add_missing_years_simple(objectifs)
# ordrer les ressources selon la quantité
ordre_type <- ressources |>
filter(ANNEE == last_year) |>
arrange(GWH) |>
pull(VARIABLES)
tous_les_types <- c("Objectifs CoCEn 2019", ordre_type)
annees_labels <- as.character(annees_levels)
ressources <- ressources |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor(as.character(VARIABLES), levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
objectifs <- objectifs |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
VARIABLES = factor("Objectifs CoCEn 2019", levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
g3_plot <- ggplot() +
# Bars (objectives )
geom_col_interactive(
data = objectifs,
aes(x = ANNEE, y = GWH, fill = VARIABLES,
tooltip = paste0("Objectifs de production de biométhane", " ", ANNEE, " : ", round(GWH, 0), " GWh"),
data_id = as.character(ANNEE)),
width = 0.7,
color = NA
) +
geom_col_interactive(
data = ressources,
aes(
x = ANNEE,
y = GWH,
fill = VARIABLES,
tooltip =paste0("Production de biométhane à partir de déchets méthanisables en ", ANNEE, " : ", round(GWH, 1), " GWh"),
data_id = paste0(as.character(ANNEE), as.character(VARIABLES))),
width = 0.7,
position = "stack",
color = NA
) +
scale_fill_manual(
values = c(
"Biogaz" ="cyan3",
"Objectifs CoCEn 2019" = "grey80"
),
breaks = c(
"Biogaz",
"Objectifs CoCEn 2019"
),
labels = c(
"Biogaz" ="Injection de biométhane dans le réseau",
"Objectifs CoCEn 2019" = "Objectifs CoCEn 2019"
),
name = NULL
) +
scale_y_continuous(
name = "Injection de biométhane [GWh]",
labels = scales::label_number(big.mark = "'", decimal.mark = "."),
expand = expansion(mult = c(0, 0.1))
) +
scale_x_discrete(
drop = FALSE,
labels = function(x) {
num_x <- as.numeric(as.character(x))
ifelse(
num_x %in% c(gap1, gap2),
"", # cacher les gaps
ifelse(num_x %% 5 == 0, num_x, "") # afficher seulement tous les 5 ans
)
}
)+
# Titles and caption
labs(
title = str_wrap("**Production de biométhane à partir de déchets méthanisables, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
caption = "Source: DGE-DIREN / DGE-GEODES<br>Etat au 14.08.2026"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g3_plot,
# !!MWR : modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G3"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g3_Production_methanisable_biogaz_2015-{an_max}.png"), width = 8, height = 6, dpi = 300)
```
# Analyse {#sec-analyse}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
## Description statistique {#sec-analyse-description}
La production d’électricité sur le territoire vaudois à partir de déchets méthanisables est restée relativement stable entre 2019 et 2024 autour de 12 GWh<sub>él</sub> par an. Une baisse est observée en 2025 avec une production annuelle de 10.3 GWh<sub>él</sub> (voir @fig-G1).
Concernant la vente de chaleur, une baisse annuelle moyenne de 13% est observée depuis 2019 (7,1 GWh<sub>th</sub>) pour atteindre 3,0 GWh<sub>th</sub> en 2025 (voir @fig-G2).
La quantité estimée de biométhane produite sur le territoire vaudois, et injectée dans le réseau de gaz, à partir de déchets méthanisables suit par contre une hausse continue pour atteindre 23 GWh<sub>th</sub> en 2025.
## Interprétation {#sec-analyse-interpretation}
La tendance globale de la valorisation énergétique des déchets méthanisables est considérée comme bonne. La baisse observée de la production électrique et des ventes de chaleur est principalement liée à l'essor de la production de biométhane, qui remplace progressivement les filières de valorisation du biogaz par cogénération ou production de chaleur.
## Périmètre et limites {#sec-analyse-perimetre}
Pour la production thermique, seule la chaleur vendue à des tiers a été retenue.
Pour le biogaz, uniquement le biométhane vendu a été retenu. Le biométhane autoconsommé, sous forme de carburant ou de combustible, n'est pas inclus.
# Tableau {#sec-tableaux}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
```{r}
#| label: tbl-T1
##| tbl-cap: "Production énergétique à partir de déchets méthanisables, Vaud"
# préparer les données par ressources (pivot_wider)
# AJOUTER les objectifs
obj_elec_long <- obj_electrique |>
rename(VALEUR = GWH) |>
mutate(VARIABLES = "Electrique",
ANNEE= as.character(ANNEE))
obj_therm_long <- obj_thermique |>
rename(VALEUR = GWH) |>
mutate(VARIABLES = "Thermique",
ANNEE= as.character(ANNEE))
obj_biogaz_long <- obj_biogaz |>
rename(VALEUR = GWH) |>
mutate(VARIABLES = "Biogaz",
ANNEE= as.character(ANNEE))
data_avec_objectifs <- data_long |>
bind_rows(obj_elec_long, obj_therm_long, obj_biogaz_long)
# Créer le total et enlever les non renouvelables
df <- data_avec_objectifs |>
pivot_wider(names_from = VARIABLES, values_from = VALEUR) |>
rename(
"Vente de chaleur" = "Thermique",
"Production électrique" = "Electrique" ,
"Injection de biométhane" = "Biogaz"
) |>
select(ANNEE, `Production électrique`, `Vente de chaleur`, `Injection de biométhane`)
# select(ANNEE, `Electrique`, `Thermique`, `Biogaz`)
t1 <- df |>
mutate(across(-ANNEE, \(col) na_if(col, y = 0))) |> # on change les 0 en NA comme ça sub_missing() ci-après transforme les 0 et les NA en "-" (par exemple)
gt() |>
tab_header(title = md("**Production énergétique à partir de déchets méthanisables**"),
subtitle = "Production électrique, vente de chaleur et injection de biométhane dans le réseau, Vaud") |>
# Gestion des NA : remplace les cases vides par un tiret
sub_missing(columns = -ANNEE, missing_text = "—" ) |>
fmt_number(columns = -ANNEE, sep_mark = "'", decimals = 1) |>
cols_label(
ANNEE = "Année"
) |>
cols_width(everything() ~ pct(100 / ncol(df))) |>
tab_style(style = cell_text(weight = "bold"),
locations = list(cells_column_labels(),
cells_body())) |>
tab_style(
style = cell_text(align = "left"),
locations = list(cells_footnotes(), cells_source_notes())) |>
tab_style(
style = cell_text(align = "center"),
locations = cells_column_labels()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_column_labels(columns = ANNEE)
) |>
cols_align(align = "center", columns = -ANNEE) |>
cols_align(align = "left", columns = ANNEE) |>
cols_label_with(
columns = -c(ANNEE),
fn = \(col) md(paste0(col, "\n\n[GWh]"))
) |>
tab_style(style = cell_borders(sides = "all"),
locations = list(cells_column_labels(), cells_column_spanners())) |>
tab_style(style = cell_borders(sides = c("left", "right")),
locations = list(cells_body())) |>
tab_options(column_labels.border.bottom.color = "black") |>
tab_footnote(footnote = "Objectifs définis dans la conception cantonale de l'énergie (CoCEn 2019).",
locations = cells_body(columns = ANNEE, rows = as.numeric(as.character(ANNEE)) > year(Sys.Date())),
placement = "right") |>
tab_footnote(footnote = "Les déchets méthanisables sont des matières organiques biodégradables (ex: déchets agroalimentaire, déchets ménagers organiques) susceptibles d'être dégradées par des micro-organismes afin de produire du biogaz.",
locations = cells_title(groups = "title"),
placement = "right") |>
tab_style(
style = cell_borders(sides = "top", style = "dashed", color = "lightgrey", weight = px(1)),
locations = cells_body(rows = as.numeric(as.character(ANNEE)) == min(as.numeric(as.character(objectifs$ANNEE)))) # applies to first row
) |>
opt_table_outline(style = "solid", width = px(2), color = "lightgrey") |>
tab_source_note(
source_note = md("*Sources : DGE-DIREN / Pronovo / DGE-GEODES<br>Etat au 14.08.2026*")
)
t1
gtsave(t1, glue("./images/t1_Production_energetique_methanisable_2015-{an_max}.html"))
```
# Méthode {#sec-methode}
La **production électrique** à partir de déchets méthanisables est obtenue par les données de Pronovo (organe d’exécution pour les programmes d’encouragement des énergies renouvelables) concernant l'électricité injectée dans le réseau. Des informations plus détaillées se trouvent dans la fiche méthode pour le calul de la production d'électricité (voir sous @sec-ref-fiches).
La **vente de chaleur** à partir de biomasse agricole est obtenue par les données transmises par les installations de méthanisation agricole dans le cadre de l’inspectorat suisse des installations de compostage et méthanisation (DGE-GEODES).
La **production de biométhane** injecté dans le réseau de gaz à partir de déchets méthanisables est obtenue depuis 2025 par Pronovo dans le cadre du nouveau registre sur la production de carburants et combustibles renouvelables. Pour les années précédentes, elles proviennent, comme pour les ventes de chaleur, des données de l'inspectorat des installations de compostage et méthanisation (DGE-GEODES).
# Comparaison {#sec-comparaison}
Aucune comparaison n'a été effectuée avec la situation dans d'autres cantons ou au niveau fédéral.
# Références {#sec-ref}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
## Fiches associées {#sec-ref-fiches}
**Fiches Méthode** :
* MET_08.02.02.02 : Méthode pour le calcul de la production d'électricité. Electricité injectée dans le réseau et autoconsommée (*disponible sur demande*)
* MET_08.02.05.73 : Méthode pour le calcul de la production énergétique par déchets méthanisables (*disponible sur demande*)
**Fiches Indicateur** :
* [IND_08.02.02.01 : Production électrique de sources renouvelables et non renouvelables, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.02.01_Production_Electrique_Total.html)
* [IND_08.02.03.02 : Production thermique de sources renouvelables, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.03.02_Production_Thermique_Renouvelable.html)
## Autres références {#sec-ref-autres}
* [DGE-DIREN - Conception cantonale de l’énergie (CoCEn 2019)](https://www.vd.ch/fileadmin/user_upload/themes/environnement/energie/fichiers_pdf/CoCEn_Pub_complete_20190816.pdf)
* [OFEN - Schweizerische Statistik der erneuerbaren Energien. Ausgabe 2022 (2023)](https://www.bfe.admin.ch/bfe/de/home/versorgung/statistik-und-geodaten/energiestatistiken/teilstatistiken.html)
# Glossaire {#sec-glossaire}
```{r}
# ---------------------------------------------------------
# Bloc pour lecture du file BRUT où se trouvent toutes les définition pour le glossaire et création du data.frame "definition" ----
# ---------------------------------------------------------
tryCatch(
expr = {readxl::read_excel("P:/DIREN/11 POLITIQUE ENERG/11.08 Indicateurs et stat/1 Indicateurs DIREN/3-Fiches IND MET OBJ/Liste Definitions.xlsx",
skip = 2) |>
janitor::clean_names(case="screaming_snake") |>
select(TERME, DEFINITION) |>
readr::write_csv2("./data/definitions.csv")
},
error = function(e) message("Attention: la table définition n'a pas pu être réactualisée avec les données brutes du P:/ ", e$message),
warning = function(w) message("Attention: la table définition n'a pas pu être réactualisée avec les données brutes du P:/ ", w$message)
)
```
```{r}
# ---------------------------------------------------------
# Bloc pour sélectionner les définitions à apparaître dans le glossaire ----
# ---------------------------------------------------------
# Lecture du file
def_tot <- readr::read_delim(file = "./data/definitions.csv",
delim = ";",
show_col_types = FALSE) |>
# Mettre les premières lettres de chaque définition en majuscule
dplyr::mutate(DEFINITION = stringr::str_replace(DEFINITION,"^\\p{L}",stringr::str_to_upper))
# Sélection des définitions
definitions <- def_tot |>
filter(TERME %in% c(
"Gigawattheure (GWh)",
"Déchets méthanisables"
))
# Print de la table avec modification des columns
definitions |>
gt_table_ind() |>
gt::cols_label(TERME = "", DEFINITION ="Définition") |>
gt::tab_options(table.align = "left")
```
# Annexes {#sec-annexes .unnumbered}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->