Last data update: 17 sept. 2026, 22:19
Last compile: 18 sept. 2026, 02:52
fig1 |>
filter(!poids, type_menage != "ensemble",
statut %in% c("Propriétaire non accédant", "Propriétaire accédant",
"Locataire du parc social", "Locataire du parc privé",
"Logé gratuitement")) |>
mutate(type_menage = recode(type_menage,
personnes_seules_moins65 = "Personnes seules (- 65 ans)",
familles_monoparentales = "Familles monoparentales",
couples_sans_enfant_moins65 = "Couples sans enfant (- 65 ans)",
couples_1_2_enfants = "Couples avec 1-2 enfants",
couples_3plus_enfants = "Couples avec 3+ enfants",
personnes_seules_65plus = "Personnes seules (65 ans ou +)",
couples_65plus = "Couples (65 ans ou +)",
autres_menages = "Autres ménages"
)) |>
ggplot(aes(x = type_menage, y = value, fill = statut)) +
geom_col(position = "stack") +
coord_flip() +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = NULL,
title = "Répartition des ménages par statut d'occupation",
subtitle = "selon le type de ménage, début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
fig2 |>
mutate(caracteristique = fct_reorder(caracteristique, surface_moyenne)) |>
ggplot(aes(x = caracteristique, y = surface_moyenne, fill = section)) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "m²",
title = "Surface moyenne du logement",
subtitle = "selon le type d'habitat et le statut d'occupation, début 2024") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
fig3 |>
mutate(groupe = coalesce(groupe_age, section),
caracteristique = fct_reorder(caracteristique, part_surpeuple)) |>
ggplot(aes(x = caracteristique, y = part_surpeuple, fill = groupe)) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ groupe, scales = "free_y", ncol = 1) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = NULL,
title = "Part des ménages vivant dans un logement surpeuplé",
subtitle = "selon le statut d'occupation et le type de ménage, début 2024 (en %)") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank(),
strip.text = element_text(size = 8))
fig4 |>
filter(section != "Ensemble") |>
select(section, caracteristique, logement_bruyant, logement_trop_sombre,
logement_difficile_a_chauffer, logement_difficile_a_rafraichir, logement_trop_cher) |>
pivot_longer(-c(section, caracteristique), names_to = "defaut", values_to = "part") |>
mutate(defaut = recode(defaut,
logement_bruyant = "Bruyant", logement_trop_sombre = "Trop sombre",
logement_difficile_a_chauffer = "Difficile à chauffer",
logement_difficile_a_rafraichir = "Difficile à rafraîchir", logement_trop_cher = "Trop cher"
)) |>
ggplot(aes(x = caracteristique, y = part, fill = defaut)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
scale_fill_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = NULL,
title = "Part de ménages concernés par chaque défaut du logement",
subtitle = "selon le statut d'occupation et le type d'habitat, début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
fig5 |>
filter(!poids) |>
select(-ensemble, -poids) |>
pivot_longer(-defaut, names_to = "commune", values_to = "part") |>
mutate(commune = str_replace_all(commune, "_", " "),
commune = str_to_sentence(commune),
defaut = str_wrap(defaut, 40)) |>
ggplot(aes(x = commune, y = part, fill = defaut)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
coord_flip() +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = NULL,
title = "Part de ménages concernés par les défauts de l'environnement",
subtitle = "selon le type de commune de résidence, début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc1 |>
filter(age != "Ensemble",
statut %in% c("Propriétaire non-accédant", "Propriétaire accédant",
"Locataire du parc social", "Locataire du parc privé",
"Logé gratuitement")) |>
ggplot(aes(x = age, y = part, fill = statut)) +
geom_col(position = "stack") +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = NULL,
title = "Statut d'occupation selon l'âge de la personne de référence",
subtitle = "début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
tc3 |>
filter(section != "Ensemble") |>
mutate(statut = str_replace_all(statut, "_", " "), statut = str_to_sentence(statut)) |>
ggplot(aes(x = type_menage, y = surface_moyenne_m2, fill = statut)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "m²",
title = "Surface moyenne du logement",
subtitle = "selon le statut d'occupation et le type de ménage, début 2024") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc4 |>
filter(bloc == "Surface par habitant (m²)",
!str_detect(caracteristique, "^(Surface par habitant|Par )"),
!is.na(france_metro_2013)) |>
select(caracteristique, `2013` = france_metro_2013, `2020` = france_metro_2020,
`2024` = france_metro_2024) |>
pivot_longer(-caracteristique, names_to = "annee", values_to = "surface") |>
mutate(caracteristique = fct_reorder(caracteristique, surface)) |>
ggplot(aes(x = caracteristique, y = surface, fill = annee)) +
geom_col(position = position_dodge(width = 0.75), width = 0.7) +
coord_flip() +
scale_fill_brewer(palette = "Blues", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "m² par habitant",
title = "Surface par habitant, France métropolitaine",
subtitle = "2013, 2020 et 2024") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc5 |>
filter(section != "Ensemble", caracteristique != "Ensemble") |>
select(section, caracteristique, sous_peuplement_tres_accentue, sous_peuplement_prononce,
sous_peuplement_modere, peuplement_normal, surpeuplement_modere, surpeuplement_accentue) |>
pivot_longer(-c(section, caracteristique), names_to = "situation", values_to = "part") |>
mutate(situation = str_replace_all(situation, "_", " "), situation = str_to_sentence(situation),
situation = factor(situation, levels = c("Sous peuplement tres accentue", "Sous peuplement prononce",
"Sous peuplement modere", "Peuplement normal",
"Surpeuplement modere", "Surpeuplement accentue"))) |>
ggplot(aes(x = caracteristique, y = part, fill = situation)) +
geom_col(position = position_stack(reverse = TRUE)) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
scale_fill_brewer(palette = "RdYlBu", name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = NULL,
title = "Situation de peuplement du logement",
subtitle = "selon le statut d'occupation et le type de ménage, début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc6 |>
filter(section != "Ensemble", caracteristique != "Ensemble") |>
select(section, caracteristique, trop_grand, correct, trop_petit) |>
pivot_longer(-c(section, caracteristique), names_to = "opinion", values_to = "part") |>
mutate(opinion = recode(opinion, trop_grand = "Trop grand pour vos besoins",
correct = "Correct", trop_petit = "Trop petit pour vos besoins"),
opinion = factor(opinion, levels = c("Trop petit pour vos besoins", "Correct",
"Trop grand pour vos besoins"))) |>
ggplot(aes(x = caracteristique, y = part, fill = opinion)) +
geom_col(position = position_stack(reverse = TRUE)) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
scale_fill_manual(values = c("Trop petit pour vos besoins" = "#E8737A",
"Correct" = "#8FB0DE", "Trop grand pour vos besoins" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = NULL,
title = "Opinion des ménages sur l'adéquation du logement",
subtitle = "nombre de pièces vs nombre d'occupants, début 2024 (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc7 |>
filter(!str_starts(defaut, "Part")) |>
rename(`Quartier prioritaire (QPV)` = qpv, `Unités urbaines environnantes` = unites_urbaines_environnantes) |>
mutate(defaut = fct_reorder(defaut, `Quartier prioritaire (QPV)`)) |>
pivot_longer(-defaut, names_to = "zone", values_to = "part") |>
ggplot(aes(x = defaut, y = part, fill = zone)) +
geom_col(position = position_dodge(width = 0.75), width = 0.7) +
coord_flip() +
scale_fill_manual(values = c("Quartier prioritaire (QPV)" = "#E8737A",
"Unités urbaines environnantes" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = NULL,
title = "Défauts de l'environnement du logement",
subtitle = "dans les quartiers prioritaires vs les unités urbaines environnantes (en %)") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())
tc8 |>
filter(section != "Ensemble") |>
mutate(caracteristique = fct_reorder(caracteristique, part_emmenages_recents)) |>
ggplot(aes(x = caracteristique, y = part_emmenages_recents, fill = section)) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ section, scales = "free_y", ncol = 1) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = NULL,
title = "Part des ménages ayant emménagé au cours des quatre dernières années",
subtitle = "début 2024 (en %)") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank(),
strip.text = element_text(size = 8))