Last data update: 18 Sep 2026, 14:40
Last compile: 18 Sep 2026, 14:48
fig1 |>
mutate(zone = factor(zone, levels = zones_levels), annee = factor(annee)) |>
ggplot(aes(x = annee, y = part, fill = critair)) +
geom_col(position = position_stack(reverse = TRUE)) +
facet_wrap(~ zone, ncol = 3) +
scale_fill_manual(values = c("1 et électrique (E)" = "#1B3F8B", "2" = "#8FB0DE",
"3" = "#E8C547", "4" = "#E8737A", "5 et non classé" = "#8B0000"),
name = "Crit'Air") +
theme_minimal(base_size = 11) +
labs(x = NULL, y = NULL,
title = "Répartition des catégories Crit'Air dans le parc de voitures",
subtitle = "2015 vs 2025, selon le type d'intercommunalité (%)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fig2 |>
mutate(zone = str_remove(zone, "¹"), zone = factor(zone, levels = zones_levels)) |>
ggplot(aes(x = zone, y = evolution_pct, fill = polluant)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
coord_flip() +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "Évolution 2014-2024 (%)",
title = "Évolution des émissions polluantes des voitures",
subtitle = "entre 2014 et 2024, selon le type d'intercommunalité") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
Estimation en différence de différences : variation observée du parc en ZFE comparée à une évolution contrefactuelle (ce qui se serait passé sans ZFE) ; l’écart entre les deux est l’« effet de la ZFE », avec son intervalle de confiance.
fig3 |>
select(critair, `Observée (avec ZFE)` = variation_observee,
`Contrefactuelle (sans ZFE)` = variation_contrefactuelle) |>
pivot_longer(-critair, names_to = "scenario", values_to = "variation") |>
ggplot(aes(x = critair, y = variation, fill = scenario)) +
geom_col(position = position_dodge(width = 0.75), width = 0.7) +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
scale_fill_manual(values = c("Observée (avec ZFE)" = "#1B3F8B",
"Contrefactuelle (sans ZFE)" = "#8FB0DE"), name = NULL) +
theme_minimal(base_size = 13) +
labs(x = "Catégorie Crit'Air", y = "Variation du parc (%)",
title = "Évolution du parc de voitures, observée vs contrefactuelle",
subtitle = "entre trois ans avant et deux ans après la mise en place de la ZFE") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fig3 |>
filter(!is.na(effet_zfe)) |>
# Seule la contrefactuelle est estimée (modèle) ; l'observée vient du
# registre RSVERO (comptage, pas d'incertitude d'échantillonnage) -- l'IC de
# l'effet (observée - contrefactuelle) hérite donc directement de l'IC de la
# contrefactuelle, translaté par la valeur observée.
mutate(effet_ic_inf = variation_observee - ic_sup,
effet_ic_sup = variation_observee - ic_inf) |>
ggplot(aes(x = critair, y = effet_zfe)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "grey50") +
geom_pointrange(aes(ymin = effet_ic_inf, ymax = effet_ic_sup),
color = "#1B3F8B", size = 0.8) +
theme_minimal(base_size = 13) +
labs(x = "Catégorie Crit'Air", y = "Effet de la ZFE (points de %)",
title = "Effet de la ZFE sur le parc de voitures, par catégorie Crit'Air",
subtitle = "estimation en différence de différences ; barres = intervalle de confiance") +
theme(panel.grid.minor = element_blank())
fig4 |>
select(polluant, `Observée (avec ZFE)` = variation_observee,
`Contrefactuelle (sans ZFE)` = variation_contrefactuelle) |>
pivot_longer(-polluant, names_to = "scenario", values_to = "variation") |>
ggplot(aes(x = polluant, y = variation, fill = scenario)) +
geom_col(position = position_dodge(width = 0.75), width = 0.7) +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
coord_flip() +
scale_fill_manual(values = c("Observée (avec ZFE)" = "#1B3F8B",
"Contrefactuelle (sans ZFE)" = "#8FB0DE"), name = NULL) +
theme_minimal(base_size = 13) +
labs(x = NULL, y = "Évolution des émissions (%)",
title = "Évolution des émissions polluantes, observée vs contrefactuelle",
subtitle = "entre trois ans avant et deux ans après la mise en place de la ZFE") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
fig4 |>
mutate(effet_ic_inf = variation_observee - ic_sup,
effet_ic_sup = variation_observee - ic_inf) |>
ggplot(aes(x = polluant, y = effet_zfe)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "grey50") +
geom_pointrange(aes(ymin = effet_ic_inf, ymax = effet_ic_sup),
color = "#E8737A", size = 0.8) +
coord_flip() +
theme_minimal(base_size = 13) +
labs(x = NULL, y = "Effet de la ZFE (points de %)",
title = "Effet de la ZFE sur les émissions polluantes, par polluant",
subtitle = "estimation en différence de différences ; barres = intervalle de confiance") +
theme(panel.grid.minor = element_blank())