Last data update: 18 sept. 2026, 23:41
Last compile: 18 sept. 2026, 23:42
fig1 |>
mutate(departement = fct_reorder(departement, taux_vulnerabilite)) |>
ggplot(aes(x = departement, y = taux_vulnerabilite)) +
geom_col(fill = "#1B3F8B") +
geom_hline(yintercept = fig1_national, linetype = "dashed", color = "#E8737A") +
coord_flip() +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "%",
title = "Taux de vulnérabilité énergétique par département",
subtitle = paste0("2021 (pointillé : moyenne France métropolitaine, ", fig1_national, " %)")) +
theme(panel.grid.minor = element_blank(), panel.grid.major.y = element_blank())
fig2 |>
ggplot(aes(x = dpe)) +
geom_col(aes(y = depenses), fill = "#1B3F8B") +
geom_line(aes(y = superficie * max(depenses) / max(superficie), group = 1), color = "#E8737A", linewidth = 1) +
geom_point(aes(y = superficie * max(depenses) / max(superficie)), color = "#E8737A") +
scale_y_continuous(name = "Dépenses annuelles (€)",
sec.axis = sec_axis(~ . * max(fig2$superficie) / max(fig2$depenses), name = "Superficie (m²)")) +
theme_minimal(base_size = 12) +
labs(x = "Étiquette DPE",
title = "Dépenses énergétiques et superficie moyennes selon l'étiquette DPE",
subtitle = "2021") +
theme(panel.grid.minor = element_blank())
fig3 |>
select(type_menage, part_ensemble_menages, part_ensemble_vulnerables) |>
pivot_longer(-type_menage, names_to = "serie", values_to = "part") |>
mutate(serie = recode(serie, part_ensemble_menages = "Part dans l'ensemble des ménages",
part_ensemble_vulnerables = "Part dans les ménages vulnérables"),
type_menage = fct_reorder(type_menage, part, .fun = max)) |>
ggplot(aes(x = type_menage, y = part, fill = serie)) +
geom_col(position = "dodge") +
coord_flip() +
scale_fill_manual(values = c("Part dans l'ensemble des ménages" = "#8FA8D8",
"Part dans les ménages vulnérables" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "%",
title = "Répartition des ménages selon leur type",
subtitle = "ensemble des ménages vs. ménages vulnérables énergétiquement, 2021") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig3 |>
gt() |>
tab_header(title = "Vulnérabilité, revenus, dépenses et logement selon le type de ménage", subtitle = "2021") |>
fmt_number(columns = -type_menage, decimals = 1)| Vulnérabilité, revenus, dépenses et logement selon le type de ménage | |||||||
| 2021 | |||||||
| type_menage | part_ensemble_menages | part_ensemble_vulnerables | part_vulnerables | revenu_disponible_mensuel | depenses_annuelles | part_dpe_efg | superficie_moyenne |
|---|---|---|---|---|---|---|---|
| Personnes seules de 60 ans ou plus | 21.7 | 50.0 | 40.0 | 1,958.0 | 1,986.0 | 51.0 | 89.0 |
| Autres personnes seules | 19.2 | 23.5 | 21.2 | 1,961.0 | 1,304.0 | 39.0 | 63.0 |
| Familles monoparentales | 10.6 | 9.2 | 15.2 | 2,831.0 | 1,632.0 | 31.0 | 88.0 |
| Couples de 60 ans ou plus | 14.8 | 9.2 | 10.9 | 3,822.0 | 2,040.0 | 37.0 | 110.0 |
| Autres couples sans enfant | 11.1 | 3.8 | 6.0 | 4,184.0 | 1,610.0 | 32.0 | 89.0 |
| Autres couples avec enfants | 22.7 | 4.3 | 3.3 | 5,207.0 | 1,759.0 | 25.0 | 108.0 |
| Ensemble | 100.0 | 100.0 | 17.4 | 3,403.0 | 1,733.0 | 36.0 | 91.0 |
fig4 |>
mutate(statut_occupation = str_wrap(statut_occupation, 25)) |>
ggplot(aes(x = statut_occupation, y = effectifs / 1000, fill = dpe)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("E, F ou G" = "#E8737A", "A, B, C ou D" = "#1B3F8B"), name = "Étiquette DPE") +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "Milliers de ménages",
title = "Ménages vulnérables selon leur statut d'occupation et l'étiquette DPE",
subtitle = "2021") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig4_eligibilite |>
mutate(niveau_prise_en_charge = recode(niveau_prise_en_charge,
prise_charge_30 = "30 %", prise_charge_45 = "45 %",
prise_charge_60 = "60 %", prise_charge_80 = "80 %"),
niveau_prise_en_charge = fct_relevel(niveau_prise_en_charge, "30 %", "45 %", "60 %", "80 %")) |>
ggplot(aes(x = str_wrap(paste(statut_occupation, dpe), 25), y = part, fill = niveau_prise_en_charge)) +
geom_col() +
coord_flip() +
scale_fill_brewer(palette = "Blues", name = "Prise en charge") +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "%",
title = "Répartition selon le niveau de prise en charge MaPrimeRénov'",
subtitle = "propriétaires de logements occupés par des ménages vulnérables, 2021") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig5 |>
count(typologie, sort = TRUE) |>
gt() |>
tab_header(title = "Typologie des départements selon leur taux de vulnérabilité", subtitle = "2021") |>
cols_label(typologie = "Typologie", n = "Nombre de départements")| Typologie des départements selon leur taux de vulnérabilité | |
| 2021 | |
| Typologie | Nombre de départements |
|---|---|
| Taux élevé à cause du bâti et des revenus | 29 |
| Taux proche de la moyenne | 21 |
| Taux élevé à cause du climat, du bâti et des revenus | 19 |
| Taux modéré grâce au bâti et aux revenus | 15 |
| Taux modéré grâce au climat, malgré bâti et revenus | 8 |
| Taux élevé du fait du climat | 4 |
fig6 |>
select(territoire, starts_with("contrib_")) |>
pivot_longer(-territoire, names_to = "contribution", values_to = "valeur") |>
mutate(contribution = recode(contribution,
contrib_structure_revenus = "Structure des revenus",
contrib_qualite_isolation = "Qualité d'isolation du parc",
contrib_formes_habitat = "Formes de l'habitat",
contrib_energies_chauffage = "Énergies de chauffage",
contrib_climat_residuel = "Climat et effet résiduel"),
territoire = fct_relevel(territoire, "Pôles urbains", "Couronnes urbaines",
"Rural périurbain", "Rural non périurbain")) |>
ggplot(aes(x = territoire, y = valeur, fill = contribution)) +
geom_col() +
geom_point(data = fig6, aes(x = territoire, y = ecart), inherit.aes = FALSE, shape = 18, size = 3) +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "Points de %",
title = "Contributions à l'écart de taux de vulnérabilité par rapport à la moyenne nationale",
subtitle = "selon la densité des territoires, 2021 (losange : écart total)") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
figc1 |>
mutate(dpe = fct_relevel(dpe, "A, B ou C", "D ou E", "F ou G")) |>
ggplot(aes(x = mode_chauffage, y = depenses, fill = dpe)) +
geom_col(position = "dodge") +
coord_flip() +
scale_fill_manual(values = c("A, B ou C" = "#8FA8D8", "D ou E" = "#1B3F8B", "F ou G" = "#E8737A"),
name = "Étiquette DPE") +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "Dépenses annuelles (€)",
title = "Dépenses énergétiques conventionnelles selon le mode de chauffage et le DPE",
subtitle = "2021") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
figc2 |>
slice_max(abs(ecart), n = 15) |>
select(departement, ecart, starts_with("contrib_"), effet_residuel) |>
pivot_longer(c(starts_with("contrib_"), effet_residuel), names_to = "composante", values_to = "valeur") |>
mutate(composante = recode(composante,
contrib_climat = "Climat",
contrib_structure_revenus = "Structure des revenus",
contrib_parc_residentiel = "Parc résidentiel",
effet_residuel = "Effet résiduel"),
departement = fct_reorder(departement, ecart)) |>
ggplot(aes(x = departement, y = valeur, fill = composante)) +
geom_col() +
coord_flip() +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "Points de %",
title = "Décomposition de l'écart de taux de vulnérabilité",
subtitle = "15 départements aux écarts les plus marqués, 2021") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())