Last data update: 26 oct. 2026, 17:56
Last compile: 26 oct. 2026, 17:58
Insee, rapport sur le patrimoine des ménages 2024. Les ménages propriétaires de leur résidence principale incluent les usufruitiers. Sources : enquêtes Patrimoine 1997-1998 et 2009-2010, enquête Histoire de vie et patrimoine 2020-2021 (France métropolitaine pour la Figure 1, France hors Mayotte pour les Figures 2 et 3 ; ménages en logement ordinaire). Des changements méthodologiques (pondérations) expliquent des écarts avec les chiffres publiés précédemment.
Début 2021, 57,7 % des ménages sont propriétaires de leur résidence principale — contre 56,1 % en 1998 : la part globale n’a pratiquement pas bougé, mais sa composition a beaucoup changé.
fig1 |>
filter(section == "Âge de la personne de référence") |>
mutate(caracteristique = fct_inorder(caracteristique), annee = factor(annee)) |>
ggplot(aes(x = caracteristique, y = taux / 100, color = annee, group = annee)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
geom_text(data = ~ filter(.x, annee == "2021"), aes(label = sprintf("%.0f", taux)), vjust = -1, size = 3.5,
show.legend = FALSE) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, 0.85)) +
scale_color_manual(values = cols_annee, name = NULL) +
theme_rp() +
labs(x = "Âge de la personne de référence", y = "Part de propriétaires",
title = "Les 50-64 ans sont moins souvent propriétaires qu'en 1998 (63 % contre 72 %)",
subtitle = "taux de détention de la résidence principale par âge, 1998, 2010 et 2021")
fig1 |>
filter(section != "Ensemble", !is.na(taux)) |>
group_by(section, caracteristique) |>
summarise(premiere = min(annee), debut = taux[annee == min(annee)], fin = taux[annee == 2021], .groups = "drop") |>
mutate(variation = fin - debut,
caracteristique = fct_reorder(caracteristique, variation),
periode = paste0(premiere, "-2021")) |>
ggplot(aes(x = variation, y = caracteristique, fill = variation > 0)) +
geom_col(width = 0.7, show.legend = FALSE) +
geom_vline(xintercept = 0, color = "grey25") +
geom_text(aes(label = sprintf("%+.1f pt (%s)", variation, periode),
hjust = if_else(variation > 0, -0.05, 1.05)), size = 3.3) +
facet_grid(section ~ ., scales = "free_y", space = "free_y",
labeller = labeller(section = scales::label_wrap(16))) +
scale_fill_manual(values = c("TRUE" = bleu, "FALSE" = rose)) +
scale_x_continuous(expand = expansion(mult = c(0.25, 0.3))) +
theme_rp(11) + theme(strip.text.y = element_text(angle = 0)) +
labs(x = "Variation du taux de détention (points de %)", y = NULL,
title = "Jeunes et couples ont gagné en accès à la propriété ; les 40-64 ans en ont perdu",
subtitle = "variation du taux de détention entre 1998 et 2021 (2010 et 2021 pour le revenu)")
fig1 |>
filter(section == "Revenu disponible") |>
mutate(caracteristique = fct_inorder(caracteristique), annee = factor(annee)) |>
ggplot(aes(x = caracteristique, y = taux / 100, fill = annee)) +
geom_col(position = position_dodge(width = 0.8), width = 0.75) +
geom_text(aes(label = sprintf("%.0f", taux)), position = position_dodge(width = 0.8), vjust = -0.4, size = 3.5) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), expand = expansion(mult = c(0, 0.1))) +
scale_x_discrete(labels = scales::label_wrap(16)) +
scale_fill_manual(values = cols_annee, name = NULL) +
theme_rp() +
labs(x = "Revenu disponible (quartile)", y = NULL,
title = "La propriété se polarise selon le revenu : plus de 84 % en haut, moins de 29 % en bas",
subtitle = "taux de détention de la résidence principale par quartile de revenu disponible, 2010 et 2021 (1998 : non disponible)")
Les propriétaires sont répartis en anciens et récents (selon l’ancienneté d’achat) et en non-accédants (qui ont fini de rembourser) et accédants (qui remboursent encore un emprunt).
categ_ordre <- c("Propriétaires anciens", "Propriétaires récents", "Non-accédants", "Accédants",
"Ensemble des propriétaires")
fig2 |>
mutate(categorie = factor(categorie, levels = categ_ordre),
section = factor(section, levels = c("Âge de la personne de référence", "Type de ménage"))) |>
group_by(section) |> mutate(caracteristique = fct_inorder(caracteristique)) |> ungroup() |>
ggplot(aes(x = categorie, y = part / 100, fill = fct_rev(caracteristique))) +
geom_col(width = 0.75, color = "white", linewidth = 0.3) +
facet_wrap(~ section, scales = "free_x") +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_x_discrete(labels = scales::label_wrap(12)) +
scale_fill_brewer(palette = "Spectral", name = NULL, guide = guide_legend(reverse = TRUE, nrow = 2)) +
theme_rp(11) +
labs(x = NULL, y = NULL,
title = "Les propriétaires récents et les accédants sont jeunes et vivent en famille",
subtitle = "répartition par âge et par type de ménage selon la catégorie de propriétaires, début 2021")
fig3 |>
mutate(caracteristique = fct_inorder(caracteristique),
section = fct_inorder(section)) |>
ggplot(aes(x = montant_median / 1000, y = fct_rev(caracteristique), fill = section)) +
geom_col(width = 0.7, show.legend = FALSE) +
geom_text(aes(label = paste0(format(round(montant_median / 1000), big.mark = " "), " k€")),
hjust = 1.1, color = "white", size = 3.6, fontface = "bold") +
facet_grid(section ~ ., scales = "free_y", space = "free_y",
labeller = labeller(section = scales::label_wrap(14))) +
scale_fill_manual(values = c("Type de propriétaire" = bleu, "Âge de la personne de référence" = vert,
"Ensemble" = gris)) +
theme_rp(11) + theme(strip.text.y = element_text(angle = 0)) +
labs(x = "Patrimoine brut médian (milliers d'euros)", y = NULL,
title = "Les propriétaires de 50 à 64 ans ont le patrimoine brut médian le plus élevé (361 000 €)",
subtitle = "patrimoine brut médian des ménages propriétaires de leur résidence principale, début 2021")
fig3 |>
filter(section != "Ensemble") |>
mutate(caracteristique = fct_inorder(caracteristique), section = fct_inorder(section)) |>
pivot_longer(c(part_immobilier, part_endettement), names_to = "composante", values_to = "part") |>
mutate(composante = recode(composante, part_immobilier = "Part de l'immobilier dans le patrimoine brut",
part_endettement = "Part de l'endettement dans le patrimoine brut")) |>
ggplot(aes(x = part / 100, y = fct_rev(caracteristique), fill = composante)) +
geom_col(position = position_dodge(width = 0.8), width = 0.75) +
geom_text(aes(label = sprintf("%.0f %%", part)), position = position_dodge(width = 0.8), hjust = -0.1, size = 3.3) +
facet_grid(section ~ ., scales = "free_y", space = "free_y",
labeller = labeller(section = scales::label_wrap(14))) +
scale_x_continuous(labels = scales::percent_format(accuracy = 1), expand = expansion(mult = c(0, 0.15))) +
scale_fill_manual(values = c("Part de l'immobilier dans le patrimoine brut" = bleu,
"Part de l'endettement dans le patrimoine brut" = rose), name = NULL) +
theme_rp(11) + theme(strip.text.y = element_text(angle = 0)) +
guides(fill = guide_legend(nrow = 2)) +
labs(x = NULL, y = NULL,
title = "Chez les propriétaires de moins de 40 ans, la dette représente 42 à 49 % du patrimoine brut",
subtitle = "composition du patrimoine brut des propriétaires, début 2021")