Les comptes de revenu distribué des ménages en 2023 - IA119

Données - INSEE

Figure 1a : décomposition du RDB par dixième de niveau de vie

Code
fig1a |>
  filter(poste %in% postes_flux) |>
  mutate(groupe = fct_relevel(groupe, paste0("D", 1:10)),
         poste = fct_relevel(poste, postes_flux)) |>
  ggplot(aes(x = groupe, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "€ par UC",
       title = "Décomposition du revenu disponible brut des ménages",
       subtitle = "par dixième de niveau de vie usuel, 2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 1b : décomposition du RDB par catégorie socioprofessionnelle

Code
ordre_pcs <- c("Ouvriers", "Employés", "Professions intermédiaires",
               "Cadres, indépendants, chefs d'entreprise", "Retraités")
fig1b |>
  filter(poste %in% postes_flux, groupe %in% ordre_pcs) |>
  mutate(groupe = fct_relevel(groupe, ordre_pcs), poste = fct_relevel(poste, postes_flux)) |>
  ggplot(aes(x = groupe, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  coord_flip() +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "€ par UC",
       title = "Décomposition du revenu disponible brut des ménages",
       subtitle = "par catégorie socioprofessionnelle de la personne de référence, 2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 1c : décomposition du RDB par groupe d’âges

Code
ordre_age <- c("18-29 ans", "30-39 ans", "40-49 ans", "50-64 ans", "65 ans ou plus")
fig1c |>
  filter(poste %in% postes_flux, groupe %in% ordre_age) |>
  mutate(groupe = fct_relevel(groupe, ordre_age), poste = fct_relevel(poste, postes_flux)) |>
  ggplot(aes(x = groupe, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "€ par UC",
       title = "Décomposition du revenu disponible brut des ménages",
       subtitle = "par groupe d'âges du ménage, 2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 1d : décomposition du RDB par configuration familiale

Code
ordre_famille <- c("Personnes seules", "Familles monoparentales", "Couples sans enfant",
                    "Couples avec 1 ou 2 enfants", "Couples avec 3 enfants ou plus")
fig1d |>
  filter(poste %in% postes_flux, groupe %in% ordre_famille) |>
  mutate(groupe = fct_relevel(groupe, ordre_famille), poste = fct_relevel(poste, postes_flux)) |>
  ggplot(aes(x = groupe, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  coord_flip() +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "€ par UC",
       title = "Décomposition du revenu disponible brut des ménages",
       subtitle = "par configuration familiale, 2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 2a : composition du revenu disponible brut par vingtième

Code
fig2a |>
  filter(poste != "Revenu disponible brut des ménages (RDB du S14)") |>
  mutate(vingtieme = fct_relevel(vingtieme, paste0("V", 1:20))) |>
  ggplot(aes(x = vingtieme, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "Md€",
       title = "Composition du revenu disponible brut des ménages",
       subtitle = "par vingtième de niveau de vie, 2023") +
  theme(legend.position = "bottom", axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 2b : transferts directs et en nature par vingtième

Code
fig2b |>
  filter(poste != "Revenu disponible brut ajusté") |>
  mutate(vingtieme = fct_relevel(vingtieme, paste0("V", 1:20))) |>
  ggplot(aes(x = vingtieme, y = valeur, fill = poste)) +
  geom_col() +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 9) +
  labs(x = NULL, y = "Md€",
       title = "Transferts directs et en nature",
       subtitle = "par vingtième de niveau de vie, 2023") +
  theme(legend.position = "bottom", axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 3a : dispersion des revenus primaire et disponibles

Code
fig3a |>
  filter(cinquieme != "Moyenne") |>
  mutate(cinquieme = fct_relevel(cinquieme, paste0("C", 1:5)),
         poste = fct_relevel(poste, "Revenu primaire brut (S14)", "Revenu disponible net (RDN)",
                              "Revenu disponible brut (RDB)", "Revenu disponible brut ajusté (RDBA)")) |>
  ggplot(aes(x = cinquieme, y = valeur, color = poste, group = poste)) +
  geom_line(linewidth = 1) +
  geom_point() +
  scale_color_brewer(palette = "Set1", name = NULL) +
  theme_minimal(base_size = 11) +
  labs(x = NULL, y = "€ par UC",
       title = "Dispersion des revenus primaire et disponibles",
       subtitle = "par cinquième de niveau de vie, 2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(color = guide_legend(ncol = 2))

Figure 3b : revenu primaire, RDB, RDN et RDBA par vingtième

Code
fig3b |>
  mutate(vingtieme = fct_relevel(vingtieme, paste0("V", 1:20)),
         poste = fct_relevel(poste, "Revenu primaire brut", "Revenu disponible net de CCF",
                              "Revenu disponible brut", "Revenu disponible brut ajusté")) |>
  ggplot(aes(x = vingtieme, y = valeur, color = poste, group = poste)) +
  geom_line(linewidth = 1) +
  scale_color_brewer(palette = "Set1", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "€ par UC",
       title = "Revenu primaire, RDB, RDN et RDBA",
       subtitle = "par vingtième de niveau de vie usuel, 2023") +
  theme(legend.position = "bottom", axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank()) +
  guides(color = guide_legend(ncol = 2))

Figure 4a : évolution du pouvoir d’achat du RDBA par UC

Code
postes_4a <- c("Revenus salariaux super-bruts", "Revenus du patrimoine et mixtes des indépendants",
               "Impôts sur les revenus et le patrimoine", "Cotisations sociales",
               "Prestations en espèces et autres transferts",
               "Transferts sociaux en nature (individualisables)")
fig4a |>
  filter(poste %in% postes_4a, cinquieme != "Ensemble") |>
  mutate(cinquieme = fct_relevel(cinquieme, paste0("C", 1:5)), poste = fct_relevel(poste, postes_4a)) |>
  ggplot(aes(x = cinquieme, y = valeur, fill = poste)) +
  geom_col(position = "dodge") +
  geom_point(data = fig4a |> filter(poste == "Pouvoir d'achat du RDBA par UC des ménages",
                                     cinquieme != "Ensemble") |>
               mutate(cinquieme = fct_relevel(cinquieme, paste0("C", 1:5))),
             aes(x = cinquieme, y = valeur), inherit.aes = FALSE, shape = 18, size = 3) +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "%",
       title = "Évolution du pouvoir d'achat du RDBA par UC et de ses composantes",
       subtitle = "par cinquième de niveau de vie, 2023 (losange : pouvoir d'achat total)") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Figure 4b : contribution à l’évolution du pouvoir d’achat du RDB

Code
postes_4b <- c("Revenus salariaux super-bruts", "Revenus du patrimoine et mixtes des indépendants",
               "Impôts sur les revenus et le patrimoine", "Cotisations sociales",
               "Prestations en espèces et autres transferts")
fig4b |>
  filter(poste %in% postes_4b, cinquieme != "Ensemble") |>
  mutate(cinquieme = fct_relevel(cinquieme, paste0("C", 1:5)), poste = fct_relevel(poste, postes_4b)) |>
  ggplot(aes(x = cinquieme, y = valeur, fill = poste)) +
  geom_col() +
  geom_point(data = fig4b |> filter(poste == "Pouvoir d'achat du RDB par UC des ménages",
                                     cinquieme != "Ensemble") |>
               mutate(cinquieme = fct_relevel(cinquieme, paste0("C", 1:5))),
             aes(x = cinquieme, y = valeur), inherit.aes = FALSE, shape = 18, size = 3) +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 10) +
  labs(x = NULL, y = "Points de %",
       title = "Contributions à l'évolution du pouvoir d'achat du RDB par UC",
       subtitle = "par cinquième de niveau de vie, 2023 (losange : pouvoir d'achat total)") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))

Tableau complémentaire 1 : composition détaillée du revenu primaire brut

Code
tc1_detail |>
  pivot_wider(names_from = vingtieme, values_from = valeur) |>
  gt() |>
  tab_header(title = "Composition du revenu primaire brut des ménages",
             subtitle = "par vingtième de niveau de vie, Md€, 2023") |>
  fmt_number(columns = -poste, decimals = 1) |>
  opt_interactive(use_search = FALSE, use_page_size_select = FALSE, use_pagination = FALSE)
Composition du revenu primaire brut des ménages
par vingtième de niveau de vie, Md€, 2023
Code
tc1_agregats |>
  pivot_wider(names_from = vingtieme, values_from = valeur) |>
  gt() |>
  tab_header(title = "Principaux agrégats de revenu des ménages",
             subtitle = "par vingtième de niveau de vie, Md€, 2023") |>
  fmt_number(columns = -poste, decimals = 1) |>
  opt_interactive(use_search = FALSE, use_page_size_select = FALSE, use_pagination = FALSE)
Principaux agrégats de revenu des ménages
par vingtième de niveau de vie, Md€, 2023

Tableau complémentaire 2 : indicateurs d’inégalités 2022-2023

Code
tc2 |>
  ggplot(aes(x = factor(annee), y = valeur, fill = type_revenu)) +
  geom_col(position = "dodge") +
  facet_wrap(~ indicateur, scales = "free_y") +
  scale_fill_brewer(palette = "Set2", name = NULL) +
  theme_minimal(base_size = 11) +
  labs(x = NULL, y = NULL,
       title = "Indicateurs d'inégalités selon le concept de revenu",
       subtitle = "2022-2023") +
  theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
  guides(fill = guide_legend(ncol = 2))