Last data update: 10 nov. 2026, 09:13
Last compile: 10 nov. 2026, 09:15
Source : Insee, Insee Première n° 1798, avril 2020 ; déclarations annuelles de données sociales (DADS) et déclarations sociales nominatives (DSN).
Champ : France, salariés en EQTP du privé et des entreprises publiques, y compris bénéficiaires de contrats aidés et de contrats de professionnalisation ; hors apprentis, stagiaires, salariés agricoles et salariés des particuliers employeurs.
Suite : Les salaires dans le secteur privé en 2025 - IP2132 (champ différent : y compris alternants et stagiaires, hors entreprises publiques).
fig1 |>
filter(categorie != "Ensemble (hors emplois aidés)") |>
mutate(categorie = fct_inorder(categorie),
dimension = fct_inorder(dimension)) |>
ggplot(aes(x = fct_rev(categorie), y = net_2017, fill = categorie == "Ensemble")) +
geom_col(width = 0.7) +
geom_text(aes(label = format(net_2017, big.mark = " ")), hjust = -0.15, size = 3.5) +
coord_flip(clip = "off") +
facet_grid(dimension ~ ., scales = "free_y", space = "free_y") +
scale_fill_manual(values = c("FALSE" = bleu, "TRUE" = rouge), guide = "none") +
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "Euros par mois",
title = "Salaire mensuel net moyen en EQTP, en 2017") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank(),
strip.text.y = element_text(angle = 0, hjust = 0))
fig1 |>
filter(categorie != "Ensemble (hors emplois aidés)") |>
mutate(categorie = fct_inorder(categorie),
dimension = fct_inorder(dimension)) |>
select(dimension, categorie, Brut = brut_evol_constants, Net = net_evol_constants) |>
pivot_longer(-c(dimension, categorie), names_to = "indicateur", values_to = "evolution") |>
mutate(indicateur = factor(indicateur, levels = c("Brut", "Net"))) |>
ggplot(aes(x = fct_rev(categorie), y = evolution, fill = indicateur)) +
geom_col(position = position_dodge(width = 0.75), width = 0.7) +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
coord_flip() +
facet_grid(dimension ~ ., scales = "free_y", space = "free_y") +
scale_fill_manual(values = c("Net" = bleu, "Brut" = bleu_clair), name = NULL,
breaks = c("Net", "Brut")) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = NULL,
title = "Évolution 2017/2016 des salaires mensuels en EQTP, en euros constants",
subtitle = "en %") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank(),
strip.text.y = element_text(angle = 0, hjust = 0))
fig1 |>
select(-dimension) |>
print_table_conditional()| categorie | brut_2016 | brut_2017 | brut_evol_constants | net_2016 | net_2017 | net_evol_constants | part_effectifs_2016 | part_effectifs_2017 |
|---|---|---|---|---|---|---|---|---|
| Cadres | 5445 | 5514 | 0.2 | 4055 | 4103 | 0.1 | 19.9 | 20.4 |
| Professions intermédiaires | 3027 | 3095 | 1.2 | 2266 | 2311 | 1.0 | 20.3 | 20.2 |
| Employés | 2165 | 2198 | 0.5 | 1635 | 1662 | 0.6 | 29.4 | 29.1 |
| Ouvriers | 2261 | 2295 | 0.4 | 1715 | 1742 | 0.5 | 30.4 | 30.4 |
| Hommes | 3255 | 3307 | 0.5 | 2451 | 2488 | 0.5 | 58.4 | 58.5 |
| Femmes | 2696 | 2769 | 1.6 | 2016 | 2069 | 1.6 | 41.6 | 41.5 |
| Construction | 2742 | 2803 | 1.1 | 2070 | 2107 | 0.7 | 7.7 | 7.7 |
| Industrie | 3407 | 3464 | 0.6 | 2531 | 2576 | 0.7 | 18.0 | 17.6 |
| Tertiaire | 2959 | 3023 | 1.1 | 2227 | 2274 | 1.1 | 74.2 | 74.7 |
| Ensemble | 3023 | 3084 | 1.0 | 2270 | 2314 | 0.9 | 100.0 | 100.0 |
| Ensemble (hors emplois aidés) | 3056 | 3118 | 1.0 | 2294 | 2340 | 0.9 | NA | NA |
fig2 |>
ggplot(aes(x = annee, y = evol_salaire_net, fill = evol_salaire_net > 0)) +
geom_col() +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
geom_hline(aes(yintercept = moyenne_1997_2017), linetype = "dashed", color = rouge, linewidth = 0.8) +
geom_text(aes(label = evol_salaire_net,
vjust = if_else(evol_salaire_net >= 0, -0.4, 1.3)), size = 3) +
scale_fill_manual(values = c("TRUE" = bleu, "FALSE" = rouge), guide = "none") +
scale_x_continuous(breaks = seq(1997, 2017, 2)) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = NULL,
title = "Évolution annuelle du salaire net moyen en EQTP, en euros constants",
subtitle = "en % ; ligne pointillée = moyenne annuelle 1997-2017") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fig3 |>
mutate(centre = coalesce((borne_inf + borne_sup) / 2, borne_inf + 50, borne_sup - 50)) |>
ggplot(aes(x = centre, y = effectifs_milliers)) +
geom_col(fill = bleu, width = 90) +
scale_x_continuous(breaks = seq(1000, 9000, 1000),
labels = scales::label_number(big.mark = " ")) +
theme_minimal(base_size = 12) +
labs(x = "Salaire mensuel net (en euros)", y = "Milliers d'EQTP",
title = "Distribution des salaires mensuels nets en EQTP, en 2017",
subtitle = "Tranches de 100 euros\npremière barre : moins de 1 200 euros ; dernière : plus de 8 700 euros") +
theme(panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fc4 |>
ggplot(aes(x = centile, y = salaire_net)) +
geom_line(color = bleu, linewidth = 1.2) +
scale_x_continuous(breaks = seq(0, 100, 10)) +
scale_y_log10(breaks = c(1250, 1500, 2000, 3000, 4000, 5000, 7500, 10000),
labels = scales::label_number(big.mark = " ")) +
theme_minimal(base_size = 12) +
labs(x = "Centile", y = "Euros par mois",
title = "Salaire mensuel net par centile, en 2017",
subtitle = "Échelle logarithmique") +
theme(panel.grid.minor = element_blank())
Part des salariés dont le salaire mensuel net est supérieur ou égal à \(s\), en fonction de \(s\), les deux axes en échelle logarithmique. Points : bornes inférieures des tranches de la figure 3 ; droite : régression sur les tranches à partir de 3 000 euros.
N_total <- sum(fig3$effectifs_milliers)
pareto <- fig3 |>
filter(!is.na(borne_inf)) |>
arrange(borne_inf) |>
mutate(part_au_dessus = rev(cumsum(rev(effectifs_milliers))) / N_total)
seuil_pareto <- 3000
fit_pareto <- lm(log(part_au_dessus) ~ log(borne_inf), data = filter(pareto, borne_inf >= seuil_pareto))
alpha <- -coef(fit_pareto)[2]
pareto |>
mutate(ajuste = exp(predict(fit_pareto, newdata = pick(everything()))),
ajuste = if_else(ajuste <= 1, ajuste, NA_real_)) |>
ggplot(aes(x = borne_inf, y = part_au_dessus)) +
geom_point(color = bleu, size = 1.5) +
geom_line(aes(y = ajuste), color = rouge, linewidth = 0.8, linetype = "dashed", na.rm = TRUE) +
annotate("text", x = 5000, y = 0.3, color = rouge, hjust = 0, size = 4,
label = paste0("Pente : -", format(round(alpha, 2), decimal.mark = ","),
"\nR² = ", format(sprintf("%.4f", summary(fit_pareto)$r.squared)) |> str_replace("\\.", ","))) +
scale_x_log10(breaks = c(1200, 1500, 2000, 3000, 4000, 5000, 7000, 8700),
labels = scales::label_number(big.mark = " ")) +
scale_y_log10(breaks = c(0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1),
labels = scales::label_percent(accuracy = 1)) +
theme_minimal(base_size = 12) +
labs(x = "Salaire mensuel net s (en euros)", y = "Part des EQTP avec un salaire ≥ s",
title = "Distribution des salaires mensuels nets en EQTP, en 2017",
subtitle = "Échelle log-log (Pareto) ; droite ajustée à partir de 3 000 euros") +
theme(panel.grid.minor = element_blank())
plot_fig4 <- fig4 |>
mutate(indicateur = recode(indicateur, D1 = "1er décile (D1)", Mediane = "Médiane", D9 = "9e décile (D9)")) |>
ggplot(aes(x = annee, y = value, color = indicateur)) +
geom_line(linewidth = 1.2) +
geom_hline(yintercept = 100, color = "grey60", linetype = "dashed") +
scale_color_manual(values = c("1er décile (D1)" = rouge, "Médiane" = "grey40", "9e décile (D9)" = bleu), name = NULL) +
scale_x_continuous(breaks = seq(1996, 2018, 2)) +
scale_y_continuous(breaks = seq(90, 130, 2)) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = NULL,
title = "Déciles des salaires nets en EQTP, en euros constants",
subtitle = "Indice base 100 en 1996 - Échelle linéaire") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank())
plot_fig4
plot_fig4 +
scale_y_log10(breaks = seq(90, 130, 2)) +
labs(subtitle = "Indice base 100 en 1996 - Échelle logarithmique")
fc2 |>
filter(quantile != "Moyenne") |>
mutate(quantile = fct_reorder(quantile, ordre),
sexe = factor(sexe, levels = c("Femmes", "Hommes", "Ensemble"))) |>
ggplot(aes(x = quantile, y = niveau, color = sexe, group = sexe)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Femmes" = rouge, "Hommes" = bleu, "Ensemble" = "grey50"), name = NULL) +
scale_y_log10(breaks = c(1250, 1500, 2000, 3000, 4000, 6000, 8000, 10000),
labels = scales::label_number(big.mark = " ")) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "Euros par mois",
title = "Salaire mensuel net en EQTP par quantile et par sexe, en 2017",
subtitle = "Échelle logarithmique") +
theme(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.minor = element_blank())
fc2 |>
select(-ordre) |>
print_table_conditional()fc1 |>
filter(sexe != "Ensemble", categorie != "Ensemble") |>
mutate(categorie = fct_inorder(categorie)) |>
ggplot(aes(x = categorie, y = net_2017, fill = sexe)) +
geom_col(position = position_dodge(width = 0.8), width = 0.75) +
geom_text(aes(label = net_2017), position = position_dodge(width = 0.8), vjust = -0.4, size = 3.5) +
scale_fill_manual(values = c("Femmes" = rouge, "Hommes" = bleu), name = NULL) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "Euros par heure",
title = "Salaire horaire net moyen, en 2017",
subtitle = "selon le sexe et la catégorie socioprofessionnelle") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fc1 |>
print_table_conditional()| sexe | categorie | brut_2016 | brut_2017 | brut_evol_constants | net_2016 | net_2017 | net_evol_constants |
|---|---|---|---|---|---|---|---|
| Ensemble | Ensemble | 19.4 | 19.8 | 0.7 | 14.6 | 14.8 | 0.7 |
| Ensemble | Cadres | 35.3 | 35.6 | -0.2 | 26.3 | 26.5 | -0.3 |
| Ensemble | Professions intermédiaires | 19.5 | 19.9 | 0.8 | 14.6 | 14.8 | 0.6 |
| Ensemble | Employés | 14.0 | 14.2 | 0.2 | 10.6 | 10.7 | 0.4 |
| Ensemble | Ouvriers | 14.3 | 14.5 | 0.4 | 10.9 | 11.0 | 0.5 |
| Hommes | Ensemble | 20.8 | 21.0 | 0.3 | 15.6 | 15.8 | 0.3 |
| Hommes | Cadres | 37.7 | 37.9 | -0.5 | 28.1 | 28.3 | -0.5 |
| Hommes | Professions intermédiaires | 20.5 | 20.8 | 0.6 | 15.4 | 15.6 | 0.4 |
| Hommes | Employés | 14.5 | 14.6 | -0.2 | 11.0 | 11.1 | -0.1 |
| Hommes | Ouvriers | 14.6 | 14.8 | 0.3 | 11.1 | 11.3 | 0.3 |
| Femmes | Ensemble | 17.5 | 17.9 | 1.3 | 13.1 | 13.4 | 1.3 |
| Femmes | Cadres | 30.9 | 31.4 | 0.4 | 22.8 | 23.2 | 0.5 |
| Femmes | Professions intermédiaires | 18.3 | 18.7 | 1.2 | 13.6 | 13.9 | 0.9 |
| Femmes | Employés | 13.8 | 14.0 | 0.4 | 10.4 | 10.5 | 0.6 |
| Femmes | Ouvriers | 12.8 | 13.1 | 1.0 | 9.7 | 10.0 | 1.3 |
fc3 |>
filter(sexe != "Ensemble", categorie != "Ensemble") |>
mutate(categorie = fct_inorder(categorie)) |>
ggplot(aes(x = categorie, y = net_2017, fill = sexe)) +
geom_col(position = position_dodge(width = 0.8), width = 0.75) +
geom_text(aes(label = format(net_2017, big.mark = " ")),
position = position_dodge(width = 0.8), vjust = -0.4, size = 3.5) +
scale_fill_manual(values = c("Femmes" = rouge, "Hommes" = bleu), name = NULL) +
theme_minimal(base_size = 12) +
labs(x = NULL, y = "Euros par mois",
title = "Salaire mensuel net moyen en EQTP, en 2017",
subtitle = "selon le sexe et la catégorie socioprofessionnelle") +
theme(legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank())
fc3 |>
print_table_conditional()| sexe | categorie | brut_2016 | brut_2017 | brut_evol_constants | net_2016 | net_2017 | net_evol_constants | part_effectifs_2016 | part_effectifs_2017 |
|---|---|---|---|---|---|---|---|---|---|
| Ensemble | Ensemble | 3023 | 3084 | 1.0 | 2270 | 2314 | 0.9 | 100.0 | 100.0 |
| Ensemble | Cadres | 5445 | 5514 | 0.2 | 4055 | 4103 | 0.1 | 19.9 | 20.4 |
| Ensemble | Professions intermédiaires | 3027 | 3095 | 1.2 | 2266 | 2311 | 1.0 | 20.3 | 20.2 |
| Ensemble | Employés | 2165 | 2198 | 0.5 | 1635 | 1662 | 0.6 | 29.4 | 29.1 |
| Ensemble | Ouvriers | 2261 | 2295 | 0.4 | 1715 | 1742 | 0.5 | 30.4 | 30.4 |
| Hommes | Ensemble | 3255 | 3307 | 0.5 | 2451 | 2488 | 0.5 | 58.4 | 58.5 |
| Hommes | Cadres | 5820 | 5879 | 0.0 | 4351 | 4392 | -0.1 | 22.2 | 22.5 |
| Hommes | Professions intermédiaires | 3204 | 3268 | 1.0 | 2406 | 2450 | 0.8 | 19.0 | 18.8 |
| Hommes | Employés | 2257 | 2283 | 0.1 | 1713 | 1734 | 0.2 | 15.9 | 15.8 |
| Hommes | Ouvriers | 2322 | 2353 | 0.3 | 1761 | 1785 | 0.3 | 42.9 | 42.9 |
| Femmes | Ensemble | 2696 | 2769 | 1.6 | 2016 | 2069 | 1.6 | 41.6 | 41.5 |
| Femmes | Cadres | 4747 | 4847 | 1.0 | 3506 | 3574 | 0.9 | 16.8 | 17.4 |
| Femmes | Professions intermédiaires | 2814 | 2879 | 1.6 | 2096 | 2145 | 1.3 | 22.1 | 22.2 |
| Femmes | Employés | 2122 | 2158 | 0.6 | 1599 | 1628 | 0.8 | 48.4 | 47.7 |
| Femmes | Ouvriers | 1974 | 2018 | 1.2 | 1498 | 1536 | 1.5 | 12.7 | 12.8 |