Last data update: 29 sept. 2026, 17:52
Last compile: 29 sept. 2026, 17:52
fig1 |>
filter(versant == "FPE",
categorie %in% c("Ensemble", "Fonctionnaires", "dont catégorie A", "dont catégorie B",
"dont catégorie C", "Contractuels")) |>
mutate(categorie = fct_relevel(categorie, "Contractuels", "dont catégorie C", "dont catégorie B",
"dont catégorie A", "Fonctionnaires", "Ensemble")) |>
filter(statistique %in% c("1er décile", "1er quartile", "Salaire médian", "3e quartile", "9e décile")) |>
pivot_wider(names_from = statistique, values_from = valeur) |>
ggplot(aes(x = categorie)) +
geom_linerange(aes(ymin = `1er décile`, ymax = `9e décile`), color = "#1B3F8B", linewidth = 3, alpha = 0.3) +
geom_linerange(aes(ymin = `1er quartile`, ymax = `3e quartile`), color = "#1B3F8B", linewidth = 6, alpha = 0.6) +
geom_point(aes(y = `Salaire médian`), color = "#E8737A", size = 2) +
coord_flip() +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "€ par mois (brut)",
title = "Distribution des salaires bruts moyens dans la FPE",
subtitle = "médiane, quartiles et déciles, 2023") +
theme(panel.grid.minor = element_blank())
fig2 |>
filter(categorie == "Ensemble", indicateur %in% c("Salaire moyen brut", "Salaire moyen net")) |>
ggplot(aes(x = versant, y = valeur, fill = indicateur)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("Salaire moyen brut" = "#1B3F8B", "Salaire moyen net" = "#E8737A"), name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "€ par mois",
title = "Salaire moyen brut et net par versant de la fonction publique",
subtitle = "ensemble des agents, 2023") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig3 |>
filter(mesure == "niveau", versant == "FP", categorie %in% c("Cadres", "Professions intermédiaires", "Employés, ouvriers")) |>
mutate(categorie = fct_relevel(categorie, "Employés, ouvriers", "Professions intermédiaires", "Cadres")) |>
ggplot(aes(x = categorie, y = valeur, fill = sexe)) +
geom_col(position = "dodge") +
coord_flip() +
scale_fill_manual(values = c("Femmes" = "#E8737A", "Hommes" = "#1B3F8B", "Ensemble" = "grey50"), name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "€ par mois (net)",
title = "Salaire net moyen par catégorie socioprofessionnelle et sexe",
subtitle = "ensemble de la fonction publique, 2023") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig4 |>
dedup_periode() |>
filter(versant == "FPE", categorie == "Ensemble") |>
ggplot(aes(x = annee, y = valeur, color = indicateur)) +
geom_line(linewidth = 1) +
scale_color_manual(values = c("salaire mensuel brut moyen" = "#1B3F8B", "salaire mensuel net moyen" = "#E8737A"),
name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "€ par mois",
title = "Salaire mensuel moyen brut et net, FPE",
subtitle = "ensemble des agents, depuis 2015") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig5 |>
dedup_periode() |>
filter(type_salaire == "salaire net médian", categorie %in% c("Ensemble", "Fonctionnaires")) |>
ggplot(aes(x = annee, y = valeur, color = categorie, linetype = versant)) +
geom_line(linewidth = 1) +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "€ par mois (net, médian)",
title = "Salaire net mensuel médian par versant",
subtitle = "depuis 2015") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig6 |>
filter(categorie == "Cadres") |>
ggplot(aes(x = annee, y = valeur, color = versant)) +
geom_line(linewidth = 1) +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "D9 / D1",
title = "Rapport interdécile des salaires nets mensuels, cadres",
subtitle = "par versant, depuis 2012") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig7 |>
dedup_periode() |>
filter(versant %in% c("Ensemble FP", "FPE", "FPT", "FPH dont", "Secteur privé")) |>
ggplot(aes(x = annee, y = valeur, color = versant)) +
geom_line(linewidth = 1) +
geom_hline(yintercept = 0, color = "grey30") +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "%",
title = "Écart de salaire net moyen entre les femmes et les hommes",
subtitle = "par versant, depuis 2009") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig7bis |>
filter(categorie %in% c("Ensemble", "Fonctionnaires", "dont catégorie A", "dont catégorie B",
"dont catégorie C", "Contractuels"),
statistique == "Écart (en %)") |>
mutate(categorie = fct_reorder(categorie, valeur)) |>
ggplot(aes(x = categorie, y = valeur)) +
geom_col(fill = "#E8737A") +
coord_flip() +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "%",
title = "Écart de salaire net moyen femmes-hommes en 2023",
subtitle = "par catégorie, ensemble de la fonction publique") +
theme(panel.grid.minor = element_blank())
fig8 |>
filter(statut == "Ensemble", statistique %in% c("D1", "Q1", "Moyenne", "Q3", "D9")) |>
mutate(statistique = fct_relevel(statistique, "D1", "Q1", "Moyenne", "Q3", "D9")) |>
ggplot(aes(x = statistique, y = valeur, color = versant, group = versant)) +
geom_line(linewidth = 1) +
geom_point() +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "€ par mois (net)",
title = "Distribution des salaires nets mensuels moyens par versant",
subtitle = "ensemble des agents, 2023") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig9 |>
filter(categorie == "Ensemble", composante %in% c("Traitement brut", "Primes et rémunérations annexes, indemnité de résidence et supplément familial de traitement"),
indicateur == "Contributions à l'évolution du salaire net moyen (en point de %)") |>
mutate(composante = recode(composante,
"Primes et rémunérations annexes, indemnité de résidence et supplément familial de traitement" = "Primes et indemnités")) |>
ggplot(aes(x = versant, y = valeur, fill = composante)) +
geom_col(position = "stack") +
geom_hline(yintercept = 0, color = "grey30") +
scale_fill_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "Point de %",
title = "Contributions à l'évolution du salaire net moyen des fonctionnaires",
subtitle = "2022-2023, en euros constants") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig10 |>
filter(statistique == "Salaire net moyen",
categorie %in% c("Catégorie A+ de la FPE", "Catégorie A+ de la FPT", "Catégorie A+ de la FPH")) |>
mutate(categorie = fct_reorder(categorie, valeur)) |>
ggplot(aes(x = categorie, y = valeur)) +
geom_col(fill = "#1B3F8B") +
coord_flip() +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "€ par mois (net)",
title = "Salaire net moyen des agents de catégorie A+",
subtitle = "par versant, 2023") +
theme(panel.grid.minor = element_blank())
fig11 |>
filter(versant == "FPE", categorie %in% c("Catégorie A", "Catégorie B", "Catégorie C"),
tranche_age != "Ensemble") |>
ggplot(aes(x = tranche_age, y = valeur, color = categorie, group = categorie)) +
geom_line(linewidth = 1) +
geom_point() +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 10) +
labs(x = NULL, y = "€ par mois (net)",
title = "Salaire net moyen des fonctionnaires par catégorie hiérarchique et âge",
subtitle = "FPE, 2023") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig12 |>
dedup_periode() |>
ggplot(aes(x = annee, y = valeur, color = versant)) +
geom_line(linewidth = 1) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_minimal(base_size = 11) +
labs(x = NULL, y = NULL,
title = "Part des primes des fonctionnaires (y compris IR et SFT)",
subtitle = "en % du salaire brut, par versant, depuis 2012") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())
fig14 |>
filter(indicateur == "Nombre de bénéficiaires de la GIPA") |>
ggplot(aes(x = annee, y = valeur)) +
geom_col(fill = "#1B3F8B") +
theme_minimal(base_size = 11) +
labs(x = NULL, y = "Nombre de bénéficiaires",
title = "Bénéficiaires de la garantie individuelle du pouvoir d'achat",
subtitle = "FPE, 2008-2019") +
theme(panel.grid.minor = element_blank())
tranches_ordre <- c("<310", "310-319", "320-329", "330-339", "340-349", "350-359", "360-369",
"370-379", "380-399", "400-419", "420-439", "440-459", "460-479", "480-499",
"500-549", "550-599", "600-649", "650-699", "700-749", ">749", "Hors échelle",
"Indéterminé")
fig15 |>
filter(groupe %in% c("Femmes", "Hommes"), annee == max(annee)) |>
mutate(tranche = fct_relevel(tranche, tranches_ordre)) |>
group_by(groupe) |>
mutate(part = valeur / sum(valeur)) |>
ungroup() |>
ggplot(aes(x = tranche, y = part, fill = groupe)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("Femmes" = "#E8737A", "Hommes" = "#1B3F8B"), name = NULL) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal(base_size = 8) +
labs(x = "Indice majoré", y = NULL,
title = "Répartition des fonctionnaires civils par tranche d'indice majoré",
subtitle = "selon le sexe, dernière année disponible") +
theme(legend.position = "bottom", panel.grid.minor = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1))
fig16 |>
dedup_periode() |>
filter(indicateur == "Traitement indiciaire brut de base",
categorie %in% c("Ensemble", "PCS cadres et professions intellectuelles supérieures dont",
"PCS professions intermédiaires dont", "PCS employés et ouvriers dont")) |>
ggplot(aes(x = annee, y = valeur, color = categorie)) +
geom_line(linewidth = 1) +
scale_color_brewer(palette = "Set2", name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "€ par mois",
title = "Traitement indiciaire brut de base par PCS",
subtitle = "fonctionnaires civils de la FPE, depuis 2014") +
theme(legend.position = "bottom", panel.grid.minor = element_blank()) +
guides(color = guide_legend(ncol = 1))
fig1718 |>
filter(indicateur == "Salaire brut",
categorie %in% c("Ensemble", "PCS cadres et professions intellectuelles supérieures dont",
"PCS professions intermédiaires dont", "PCS employés et ouvriers dont")) |>
ggplot(aes(x = categorie, y = valeur, fill = sexe)) +
geom_col(position = "dodge") +
coord_flip() +
scale_fill_manual(values = c("Femmes" = "#E8737A", "Hommes" = "#1B3F8B"), name = NULL) +
theme_minimal(base_size = 9) +
labs(x = NULL, y = "€ par mois (brut)",
title = "Salaire brut moyen par PCS et sexe",
subtitle = "fonctionnaires civils de la FPE, 2023") +
theme(legend.position = "bottom", panel.grid.minor = element_blank())