Last data update: 26 oct. 2026, 17:59
Last compile: 26 oct. 2026, 18:01
Insee Focus n° 354 : taux de détention des actifs patrimoniaux (financiers, immobiliers, professionnels) et d’endettement des ménages, d’après les enquêtes Patrimoine 1997-1998, 2003-2004, 2009-2010, 2014-2015 et Histoire de vie et patrimoine 2017-2018, 2020-2021 et 2023-2024 (début 2024 pour la dernière). Les ménages sont en logement ordinaire, France hors Mayotte (France métropolitaine pour la série longue 1998-2024). Erratum du 10 décembre 2025 : les chiffres relatifs à l’endettement ont été corrigés après détection d’une erreur ; le fichier utilisé ici est la version corrigée.
fin <- c("Livret d'épargne", "Assurance-vie", "Épargne logement", "Épargne retraite", "Valeurs mobilières",
"Épargne salariale")
f1b <- series |> filter(figure == "Figure 1b", !non_disponible, !is.na(taux))
f1b |>
filter(produit %in% fin) |>
mutate(produit = factor(produit, levels = fin)) |>
ggplot(aes(x = annee, y = taux / 100, color = produit)) +
geom_line(linewidth = 1.2) +
geom_point(size = 1.8) +
ggrepel::geom_text_repel(data = ~ filter(.x, annee == 2024), aes(label = produit), hjust = 0, direction = "y",
nudge_x = 0.6, size = 3.4, segment.size = 0, show.legend = FALSE) +
scale_color_brewer(palette = "Dark2", guide = "none") +
scale_x_continuous(breaks = c(1998, 2004, 2010, 2015, 2018, 2021, 2024), expand = expansion(mult = c(0.02, 0.28))) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_pat() +
labs(x = NULL, y = "Part des ménages qui détiennent le produit",
title = "L'assurance-vie et l'épargne retraite progressent ; l'épargne logement recule",
subtitle = "taux de détention de produits financiers, France métropolitaine, 1998-2024")
endett <- series |> filter(figure == "Figure 1a", produit == "Endettement", !is.na(taux))
bind_rows(f1b |> filter(produit %in% c("Résidence principale", "Autres logements", "Patrimoine professionnel")),
endett) |>
mutate(produit = factor(produit, levels = c("Résidence principale", "Autres logements", "Patrimoine professionnel",
"Endettement"))) |>
ggplot(aes(x = annee, y = taux / 100, color = produit)) +
geom_line(linewidth = 1.2) +
geom_point(size = 1.8) +
geom_text(data = ~ filter(.x, annee == 2024), aes(label = sprintf("%s : %.0f %%", produit, taux)),
hjust = -0.06, size = 3.4, show.legend = FALSE) +
scale_color_manual(values = c("Résidence principale" = bleu, "Autres logements" = vert,
"Patrimoine professionnel" = jaune, "Endettement" = rose), guide = "none") +
scale_x_continuous(breaks = c(1998, 2004, 2010, 2015, 2018, 2021, 2024), expand = expansion(mult = c(0.02, 0.4))) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, NA)) +
theme_pat() +
labs(x = NULL, y = "Part des ménages",
title = "Propriété et endettement sont stables depuis vingt ans ; les autres logements progressent",
subtitle = "taux de détention immobilière et professionnelle (France métropolitaine) et taux d'endettement (France hors Mayotte, depuis 2015)")
produits2024 |>
mutate(ordre = row_number(),
etiquette = paste0(strrep(" ", pmax(niveau - 2, 0)), str_remove(produit, " \\(.*\\)$")),
etiquette = fct_rev(fct_inorder(make.unique(etiquette))),
niveau = factor(niveau, levels = 2:4, labels = c("Produit", "Détail", "Détail du détail"))) |>
ggplot(aes(x = taux / 100, y = etiquette, fill = niveau)) +
geom_col(width = 0.72) +
geom_text(aes(label = sprintf("%.1f %%", taux)), hjust = -0.1, size = 3.4) +
scale_x_continuous(labels = scales::percent_format(accuracy = 1), expand = expansion(mult = c(0, 0.12))) +
scale_fill_manual(values = c("Produit" = bleu, "Détail" = vert, "Détail du détail" = "#9BDAD2"), name = NULL) +
theme_pat() +
labs(x = NULL, y = NULL,
title = "87 % des ménages ont un livret ; 42 % une assurance-vie ; 17 % des valeurs mobilières",
subtitle = "taux de détention des produits financiers, début 2024 ; couleur : produit, détail, détail du détail")
liv <- c("Livret A ou Bleu", "Livret développement durable et solidaire (LDDS, ex-LDD ou Codevi)",
"Livret d'épargne populaire (LEP)", "Livret jeune", "Livret soumis à l'impôt (livret B, livret Orange)")
series |>
filter(figure == "Tableau complémentaire 1", produit %in% liv) |>
mutate(produit = recode(produit,
"Livret développement durable et solidaire (LDDS, ex-LDD ou Codevi)" = "LDDS",
"Livret d'épargne populaire (LEP)" = "LEP",
"Livret soumis à l'impôt (livret B, livret Orange)" = "Livret soumis à l'impôt")) |>
ggplot(aes(x = annee, y = taux / 100, color = produit)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2) +
geom_text(data = ~ filter(.x, annee == 2024), aes(label = sprintf("%s : %.0f %%", produit, taux)),
hjust = -0.06, size = 3.4, show.legend = FALSE) +
scale_color_brewer(palette = "Set1", guide = "none") +
scale_x_continuous(breaks = c(2010, 2015, 2018, 2021, 2024), expand = expansion(mult = c(0.03, 0.4))) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, NA)) +
theme_pat() +
labs(x = NULL, y = "Part des ménages",
title = "Le Livret A progresse de 68 % à 78 % des ménages depuis 2010 ; le livret jeune recule",
subtitle = "taux de détention par type de livret, France hors Mayotte, 2010-2024")
prod_f3 <- c("Livret défiscalisé", "Livret soumis à l'impôt", "Assurance-vie", "Épargne logement", "Épargne retraite",
"Valeurs mobilières", "Épargne salariale", "Résidence principale", "Autres logements",
"Patrimoine professionnel", "Endettement (ensemble)")
f3 <- carac |>
filter(figure == "Figure 3", produit %in% prod_f3, section != "Ensemble") |>
mutate(produit = factor(produit, levels = prod_f3),
section = factor(section, levels = c("Âge", "Catégorie socioprofessionnelle", "Type de ménage")))
f3 |>
group_by(section) |> mutate(caracteristique = fct_inorder(caracteristique)) |> ungroup() |>
ggplot(aes(x = produit, y = fct_rev(caracteristique), fill = taux)) +
geom_tile(color = "white", linewidth = 0.5) +
geom_text(aes(label = sprintf("%.0f", taux), color = taux > 55), size = 3.1) +
facet_grid(section ~ ., scales = "free_y", space = "free_y", labeller = labeller(section = scales::label_wrap(14))) +
scale_fill_gradient(low = "#F4F8FD", high = bleu, name = "% des ménages") +
scale_color_manual(values = c("TRUE" = "white", "FALSE" = "grey20"), guide = "none") +
scale_x_discrete(labels = ~ scales::label_wrap(10)(str_remove(.x, " \\(ensemble\\)")), position = "top") +
scale_y_discrete(labels = scales::label_wrap(42)) +
theme_pat(10) + theme(panel.grid = element_blank(), strip.text.y = element_text(angle = 0),
legend.position = "right") +
labs(x = NULL, y = NULL,
title = "Cadres, professions libérales et agriculteurs détiennent le plus d'actifs",
subtitle = "taux de détention début 2024 selon l'âge et la catégorie socioprofessionnelle de la personne de référence")
f3 |>
filter(section == "Âge", produit %in% c("Assurance-vie", "Épargne retraite", "Épargne salariale",
"Valeurs mobilières", "Épargne logement")) |>
mutate(caracteristique = fct_inorder(caracteristique)) |>
ggplot(aes(x = caracteristique, y = taux / 100, color = produit, group = produit)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2.5) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_color_brewer(palette = "Dark2", name = NULL) +
theme_pat() +
labs(x = "Âge de la personne de référence", y = "Part des ménages",
title = "L'épargne retraite et salariale culminent avant 60 ans, l'assurance-vie après 70 ans",
subtitle = "taux de détention de produits d'épargne selon l'âge, début 2024")
liv_tc2 <- c("Livret A ou Bleu", "LDDS", "LEP", "Livret jeune")
carac |>
filter(figure == "Tableau complémentaire 2", produit %in% liv_tc2, section %in% c("Âge", "Type de ménage")) |>
mutate(produit = factor(produit, levels = liv_tc2),
section = factor(section, levels = c("Âge", "Type de ménage"))) |>
group_by(section) |> mutate(caracteristique = fct_inorder(caracteristique)) |> ungroup() |>
ggplot(aes(x = caracteristique, y = taux / 100, fill = produit)) +
geom_col(position = position_dodge(width = 0.85), width = 0.8) +
facet_wrap(~ section, scales = "free_x") +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_x_discrete(labels = scales::label_wrap(10)) +
scale_fill_manual(values = c("Livret A ou Bleu" = bleu, "LDDS" = vert, "LEP" = jaune, "Livret jeune" = rose), name = NULL) +
theme_pat(10) +
labs(x = NULL, y = "Part des ménages",
title = "Le LDDS est surtout détenu à 40-70 ans, le livret jeune par les moins de 30 ans",
subtitle = "taux de détention des livrets défiscalisés par âge et type de ménage, début 2024")