Impôt sur le revenu par dixième de revenu fiscal de référence, 2003-2024

Données - DGFIP

Code
source(here::here("_rinit.R"))
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/dgfip; /usr/local/bin/R -e 'quarto::quarto_render("ir-deciles-rfr.qmd")'
# cd ~/iCloud/website/data; sh _status/run_all_silent.sh --only dgfip

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                       fig.width = 9, fig.height = 5.5, dpi = 150)
source(here::here("data", "dgfip", "_cartes.R"))

ds_path <- here::here("data", "dgfip", "ir-deciles-rfr.parquet")
ird <- arrow::read_parquet(ds_path)
fr <- scales::label_number(big.mark = " ", decimal.mark = ",")

theme_dgfip <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        panel.grid.minor = element_blank())

Source : DGFIP, statistiques sur l’impôt sur le revenu. Les foyers fiscaux sont classés par revenu fiscal de référence (RFR) par part de quotient familial, puis découpés en dix groupes de taille égale (dixièmes, ou déciles). Bornes et RFR en milliers d’euros par part.

Revenu fiscal de référence moyen par part et par dixième

Code
ird |>
  dplyr::filter(variable == "RFR moyen par part", rang %in% as.character(1:10),
                annee %in% c(2012, 2016, 2020, max(annee))) |>
  dplyr::mutate(rang = factor(as.integer(rang)), annee = factor(annee)) |>
  ggplot(aes(rang, valeur, fill = annee)) + geom_col(position = "dodge") +
  scale_fill_viridis_d(end = 0.85, name = NULL) +
  labs(title = "RFR moyen par part, selon le dixième", x = "Dixième de RFR par part", y = "k€ par part") +
  theme_dgfip + theme(legend.position = "bottom")

Seuils de RFR par part : médiane, 9e et 10e dixièmes

Code
ird |>
  dplyr::filter(variable == "Borne inférieure du décile de RFR par part", rang %in% c("5", "9", "10")) |>
  dplyr::mutate(rang = recode(rang, `5` = "Début du 5e dixième (≈ médiane)", `9` = "Début du 9e dixième", `10` = "Début du dernier dixième (top 10 %)")) |>
  ggplot(aes(annee, valeur, colour = rang)) + geom_line() + geom_point(size = 1) +
  scale_x_continuous(breaks = scales::breaks_pretty(8)) +
  labs(title = "Seuils de revenu fiscal de référence par part",
       subtitle = "Milliers d'euros par part", x = NULL, y = NULL, colour = NULL) +
  theme_dgfip + theme(legend.position = "bottom")

Taux d’imposition moyen par dixième

Code
ird |>
  dplyr::filter(variable == "Taux d'imposition moyen", rang %in% as.character(5:10)) |>
  dplyr::mutate(rang = factor(as.integer(rang))) |>
  ggplot(aes(annee, valeur, colour = rang)) + geom_line() + geom_point(size = 1) +
  scale_colour_viridis_d(name = "Dixième") +
  scale_x_continuous(breaks = scales::breaks_pretty(8)) +
  labs(title = "Taux d'imposition moyen des dixièmes supérieurs", x = NULL, y = NULL) +
  theme_dgfip