Last data update: 23 sept. 2026, 17:37
Last compile: 24 sept. 2026, 01:09
plot_taux_effort_stack(fig1, "statut_occupation", ordre_statuts, "par statut d'occupation, 2014 et 2024")
fig2a_long <- fig2a |>
select(statut_occupation, all_of(postes_taux_effort), aides_logement) |>
mutate(statut_occupation = factor(statut_occupation, levels = ordre_statuts)) |>
pivot_longer(-statut_occupation, names_to = "poste", values_to = "ecart") |>
filter(!is.na(ecart)) |>
mutate(poste = recode(poste, !!!postes_labels), poste = fct_relevel(poste, names(palette_postes)))
fig2a_points <- fig2a |>
select(statut_occupation, taux_effort_brut, taux_effort_net) |>
mutate(statut_occupation = factor(statut_occupation, levels = ordre_statuts)) |>
pivot_longer(-statut_occupation, names_to = "taux", values_to = "valeur") |>
mutate(taux = recode(taux, taux_effort_brut = "Taux d'effort brut", taux_effort_net = "Taux d'effort net"))
ggplot() +
geom_col(data = fig2a_long, aes(x = statut_occupation, y = ecart, fill = poste)) +
geom_point(data = fig2a_points, aes(x = statut_occupation, y = valeur, color = taux), shape = 18, size = 3) +
geom_hline(yintercept = 0, color = "grey30", linewidth = 0.3) +
scale_fill_manual(values = palette_postes, name = NULL) +
scale_color_manual(values = c("Taux d'effort brut" = "black", "Taux d'effort net" = "grey50"), name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "Points",
title = "Décomposition de l'évolution en points des taux d'effort",
subtitle = "par statut d'occupation entre 2014 et 2024") +
theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
guides(fill = guide_legend(ncol = 2), color = guide_legend(ncol = 1))
postes_2b <- c(revenus = "Revenus", loyers = "Loyers",
remboursements_emprunts = "Remboursements d'emprunts",
charges_locatives_eau = "Charges locatives et eau",
depenses_energetiques = "Dépenses énergétiques",
taxe_fonciere = "Taxe foncière", taxe_habitation = "Taxe d'habitation",
aides_logement = "Aides au logement")
fig2b |>
mutate(statut_occupation = factor(statut_occupation, levels = ordre_statuts)) |>
pivot_longer(-statut_occupation, names_to = "serie", values_to = "evolution") |>
filter(!is.na(evolution)) |>
mutate(serie = recode(serie, !!!postes_2b), serie = fct_relevel(serie, unname(postes_2b))) |>
ggplot(aes(x = statut_occupation, y = evolution, fill = serie)) +
geom_col(position = "dodge") +
geom_hline(yintercept = 0, color = "grey30", linewidth = 0.3) +
scale_fill_manual(values = c("Revenus" = "grey60", palette_postes), name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "% d'évolution 2014-2024",
title = "Évolution des revenus et des composantes des taux d'effort",
subtitle = "par statut d'occupation, 2014-2024") +
theme(legend.position = "bottom", axis.text.x = element_text(angle = 20, hjust = 1),
panel.grid.minor = element_blank()) +
guides(fill = guide_legend(ncol = 3))
ordre_quartiles <- c("Inférieur à Q1", "Q1 à Q2", "Q2 à Q3", "Supérieur à Q3", "Ensemble")
plot_taux_effort_stack(fig3, "quartile_revenus", ordre_quartiles,
"selon les revenus par UC, 2014 et 2024")
fig4 |>
gt(groupname_col = "groupe_age") |>
tab_header(title = "Taux d'effort net en 2024 selon le type de ménage") |>
cols_label(type_menage = "", taux_effort_net = "Taux d'effort net",
depenses_annuelles_nettes = "Dépenses annuelles nettes moyennes",
revenus_annuels = "Revenus annuels moyens",
part_ensemble_menages = "Part dans l'ensemble des ménages") |>
fmt_number(columns = c(taux_effort_net, part_ensemble_menages), decimals = 1) |>
fmt_number(columns = c(depenses_annuelles_nettes, revenus_annuels), decimals = 0)| Taux d'effort net en 2024 selon le type de ménage | ||||
| Taux d'effort net | Dépenses annuelles nettes moyennes | Revenus annuels moyens | Part dans l'ensemble des ménages | |
|---|---|---|---|---|
| Personnes de référence de moins de 65 ans | ||||
| Personnes seules | 24.5 | 7,200 | 29,500 | 21.4 |
| Familles monoparentales | 21.6 | 8,000 | 36,900 | 8.9 |
| Couples sans enfant | 14.6 | 9,100 | 62,000 | 12.9 |
| Couples avec un ou deux enfants | 17.0 | 12,500 | 73,700 | 18.5 |
| Couples avec trois enfants ou plus | 17.5 | 12,800 | 73,100 | 4.7 |
| Personnes de référence de 65 ans ou plus | ||||
| Personnes seules | 17.8 | 5,000 | 28,200 | 16.8 |
| Couples | 9.2 | 5,200 | 56,600 | 13.8 |
| Autres ménages | 17.1 | 8,300 | 48,700 | 3.1 |
| Ensemble | 16.8 | 8,200 | 48,700 | 100.0 |
tc1 |>
ggplot(aes(x = factor(annee), y = taux_effort_net, color = statut_occupation, group = statut_occupation)) +
geom_line(linewidth = 1) +
geom_point() +
scale_color_manual(values = c("Locataires du parc social" = "#1B3F8B",
"Locataires du parc privé" = "#E8737A"), name = NULL) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "%",
title = "Taux d'effort net des locataires par parc",
subtitle = "2014, 2020, 2024") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
tc2 |>
filter(champ == "France hors Mayotte", quartile_revenus != "Ensemble") |>
ggplot(aes(x = quartile_revenus, y = taux_effort_net, fill = factor(annee))) +
geom_col(position = "dodge") +
facet_wrap(~ statut_occupation) +
scale_fill_manual(values = c("2014" = "#8FA8D8", "2024" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "%",
title = "Taux d'effort net des locataires selon le parc et les revenus par UC",
subtitle = "France hors Mayotte, 2014 et 2024") +
theme(legend.position = "bottom", axis.text.x = element_text(angle = 20, hjust = 1),
panel.grid.minor = element_blank())
tc3 |>
ggplot(aes(x = quartile_revenus, y = taux_effort_net, fill = factor(annee))) +
geom_col(position = "dodge") +
facet_wrap(~ statut_occupation) +
scale_fill_manual(values = c("2014" = "#8FA8D8", "2024" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "%",
title = "Taux d'effort net des propriétaires selon le statut et les revenus par UC",
subtitle = "2014 et 2024") +
theme(legend.position = "bottom", axis.text.x = element_text(angle = 20, hjust = 1),
panel.grid.minor = element_blank())
tc4 |>
select(section, caracteristique, ensemble, proprietaire, locataire) |>
gt(groupname_col = "section") |>
tab_header(title = "Taux d'effort net selon le statut d'occupation et d'autres caractéristiques",
subtitle = "2024") |>
cols_label(caracteristique = "", ensemble = "Ensemble", proprietaire = "Propriétaire",
locataire = "Locataire") |>
fmt_number(columns = -c(section, caracteristique), decimals = 1)| Taux d'effort net selon le statut d'occupation et d'autres caractéristiques | |||
| 2024 | |||
| Ensemble | Propriétaire | Locataire | |
|---|---|---|---|
| Personne de référence de moins de 65 ans | |||
| Personnes seules | 24.5 | 20.5 | 28.9 |
| Familles monoparentales | 21.6 | 18.2 | 26.0 |
| Couples sans enfant | 14.6 | 12.6 | 20.9 |
| Couples avec un ou deux enfants | 17.0 | 16.2 | 21.1 |
| Couples avec trois enfants ou plus | 17.5 | 17.0 | 19.0 |
| Personne de référence de 65 ans ou plus | |||
| Personnes seules | 17.8 | 12.4 | 33.5 |
| Couples | 9.2 | 7.7 | 23.0 |
| Autres ménages | 17.1 | 11.3 | 24.7 |
| Par tranche d’âge de la personne de référence | |||
| Moins de 30 ans | 25.7 | 24.1 | 27.4 |
| 30-39 ans | 22.4 | 22.3 | 23.5 |
| 40-49 ans | 20.0 | 19.0 | 23.8 |
| 50-64 ans | 14.4 | 11.9 | 23.2 |
| 65-74 ans | 12.2 | 8.9 | 28.0 |
| 75 ans et plus | 12.7 | 9.6 | 30.4 |
| Par nationalité de la personne de référence | |||
| Française | 16.5 | 13.8 | 24.9 |
| Étrangère | 21.0 | 15.8 | 24.9 |
| Par ancienneté d’occupation | |||
| Moins de 4 ans | 22.0 | 19.5 | 25.3 |
| 4 ans ou plus | 15.3 | 12.9 | 24.6 |
| Par type de commune | |||
| Grands centres urbains | 17.8 | 14.2 | 24.2 |
| Centres urbains intermédiaires | 18.1 | 14.5 | 25.6 |
| Petites villes | 16.1 | 13.1 | 26.7 |
| Ceintures urbaines | 15.7 | 13.8 | 24.8 |
| Bourgs ruraux | 16.5 | 14.5 | 25.9 |
| Rural dispersé | 14.4 | 13.1 | 25.5 |
| Par période de construction | |||
| Avant 1945 | 16.0 | 13.1 | 25.8 |
| De 1946 à 1970 | 18.2 | 15.1 | 24.7 |
| De 1971 à 1990 | 15.2 | 12.7 | 24.8 |
| De 1991 à 2005 | 15.3 | 12.3 | 24.3 |
| 2006 et après | 19.9 | 17.8 | 24.5 |
| Ensemble | 16.8 | 13.9 | 24.9 |
tc5 |>
filter(statut_occupation != "Ensemble") |>
select(statut_occupation, inferieur_15, entre_15_33, entre_33_40, superieur_40) |>
pivot_longer(-statut_occupation, names_to = "tranche", values_to = "part") |>
mutate(tranche = recode(tranche, inferieur_15 = "Moins de 15 %", entre_15_33 = "15 % à 33 %",
entre_33_40 = "33 % à 40 %", superieur_40 = "Plus de 40 %"),
tranche = fct_relevel(tranche, "Moins de 15 %", "15 % à 33 %", "33 % à 40 %", "Plus de 40 %"),
statut_occupation = fct_relevel(statut_occupation, ordre_statuts)) |>
ggplot(aes(x = statut_occupation, y = part, fill = tranche)) +
geom_col() +
coord_flip() +
scale_fill_brewer(palette = "RdYlBu", direction = -1, name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "%",
title = "Distribution des taux d'effort nets selon le statut d'occupation",
subtitle = "2024") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
quartile_ordre <- c("Inférieur à Q1", "Q1 à Q2", "Q2 à Q3", "Supérieur à Q3")
tc6 |>
filter(section == "Par quartile de revenus par UC") |>
mutate(caracteristique = factor(caracteristique, levels = quartile_ordre)) |>
select(caracteristique, ensemble, proprietaire, locataire) |>
pivot_longer(-caracteristique, names_to = "statut", values_to = "ratio") |>
mutate(statut = recode(statut, ensemble = "Ensemble", proprietaire = "Propriétaire",
locataire = "Locataire"),
statut = fct_relevel(statut, "Ensemble", "Propriétaire", "Locataire")) |>
ggplot(aes(x = caracteristique, y = ratio, fill = statut)) +
geom_col(position = "dodge") +
geom_hline(yintercept = 1, linetype = "dashed", color = "grey40") +
scale_fill_manual(values = c("Ensemble" = "#1B3F8B", "Propriétaire" = "#E8737A",
"Locataire" = "#F2A65A"), name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "Ratio",
title = "Ratio entre le revenu et le revenu disponible",
subtitle = "selon le quartile de revenus par UC, 2024") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())