Last data update: 26 oct. 2026, 20:06
Last compile: 26 oct. 2026, 20:07
Indicateurs démographiques, sociaux et économiques de l’Insee pour les 567 circonscriptions législatives (géographie des élections de 2022) : population et âge, activité et diplômes, catégories sociales, logement, mobilités, niveau de vie et revenus (Filosofi 2019), accès aux équipements. 124 variables sont décrites dans l’onglet « Liste et sources des variables » (tableau en fin de page). Les indicateurs de niveau de vie ne sont pas diffusés pour 16 circonscriptions (secret statistique ; essentiellement outre-mer et Français de l’étranger). Le niveau de vie médian est exprimé en euros par an et par unité de consommation (l’intitulé « en % » de la source est une coquille).
nn |>
ggplot(aes(x = nivvie_median_diff)) +
geom_histogram(bins = 45, fill = bleu, alpha = 0.85) +
geom_vline(xintercept = median(nn$nivvie_median_diff), color = rose, linewidth = 1) +
annotate("text", x = median(nn$nivvie_median_diff), y = Inf, vjust = 1.5, hjust = -0.1, color = rose, fontface = "bold",
label = paste0("médiane : ", euro(median(nn$nivvie_median_diff)), " €")) +
scale_x_continuous(labels = euro) +
theme_circ() +
labs(x = "Niveau de vie médian de la circonscription (euros par an)", y = "Circonscriptions",
title = "Niveau de vie médian par circonscription législative", subtitle = "Filosofi 2019")
sel <- bind_rows(nn |> slice_max(nivvie_median_diff, n = 15, with_ties = FALSE) |> mutate(g = "Les plus élevés"),
nn |> slice_min(nivvie_median_diff, n = 15, with_ties = FALSE) |> mutate(g = "Les plus faibles"))
sel |>
mutate(lab = fct_reorder(nom_circo, nivvie_median_diff)) |>
ggplot(aes(x = nivvie_median_diff, y = lab, fill = g)) +
geom_col(show.legend = FALSE) +
geom_text(aes(label = euro(nivvie_median_diff)), hjust = -0.1, size = 3) +
facet_wrap(~ g, scales = "free_y", ncol = 1) +
scale_fill_manual(values = c("Les plus élevés" = rose, "Les plus faibles" = vert)) +
scale_x_continuous(labels = euro, expand = expansion(mult = c(0, 0.12))) +
theme_circ() +
labs(x = "Euros par an", y = NULL, title = "Les circonscriptions les plus riches et les plus pauvres")
nn |>
ggplot(aes(x = nivvie_median_diff, y = rpt_D9_D1_diff)) +
geom_point(color = bleu, alpha = 0.6, size = 2) +
geom_text_repel(data = ~ bind_rows(slice_max(.x, rpt_D9_D1_diff, n = 6, with_ties = FALSE), slice_min(.x, rpt_D9_D1_diff, n = 3, with_ties = FALSE)),
aes(label = nom_circo), size = 3, segment.size = 0.2) +
scale_x_continuous(labels = euro) +
theme_circ() +
labs(x = "Niveau de vie médian (euros par an)", y = "Rapport interdécile D9/D1",
title = "Niveau de vie médian et inégalités au sein des circonscriptions")
d1 <- nn |> filter(!is.na(actdip_BAC5))
d1 |>
ggplot(aes(x = actdip_BAC5, y = nivvie_median_diff)) +
geom_point(color = bleu, alpha = 0.6, size = 2) +
geom_smooth(method = "lm", se = FALSE, color = rose) +
geom_text_repel(data = ~ slice_max(.x, actdip_BAC5, n = 5, with_ties = FALSE), aes(label = nom_circo), size = 3, segment.size = 0.2) +
scale_y_continuous(labels = euro) +
theme_circ() +
labs(x = "Part des actifs diplômés de niveau bac+5 ou plus (%)", y = "Niveau de vie médian (euros par an)",
title = "Niveau de vie et diplômes des actifs",
subtitle = sprintf("corrélation : %.2f (%d circonscriptions)", cor(d1$actdip_BAC5, d1$nivvie_median_diff), nrow(d1)))
nn |>
ggplot(aes(x = actcho, y = tx_pauvrete60_diff)) +
geom_point(aes(color = zone), alpha = 0.7, size = 2) +
geom_smooth(method = "lm", se = FALSE, color = "grey30") +
scale_color_manual(values = c("Métropole" = bleu, "Outre-mer" = rose), name = NULL) +
theme_circ() +
labs(x = "Part des actifs au chômage (% de la population active, recensement)", y = "Taux de pauvreté à 60 % (%)",
title = "Chômage et pauvreté dans les circonscriptions",
subtitle = sprintf("corrélation : %.2f", cor(nn$actcho, nn$tx_pauvrete60_diff, use = "complete.obs")))
circ |>
filter(!is.na(pop_rur), !is.na(modtrans_voit)) |>
ggplot(aes(x = pop_rur, y = modtrans_voit)) +
geom_point(color = bleu, alpha = 0.6, size = 2) +
geom_smooth(method = "lm", se = FALSE, color = rose) +
theme_circ() +
labs(x = "Part de la population vivant dans une commune rurale (%)", y = "Actifs allant travailler en voiture (%)",
title = "Ruralité et usage de la voiture pour aller travailler")
circ |>
filter(!is.na(proprio), !is.na(age_moyen)) |>
ggplot(aes(x = age_moyen, y = proprio)) +
geom_point(color = bleu, alpha = 0.6, size = 2) +
geom_smooth(method = "lm", se = FALSE, color = rose) +
theme_circ() +
labs(x = "Âge moyen de la population (ans)", y = "Part de propriétaires (% des résidences principales)",
title = "Âge de la population et propriété du logement")
circ |>
filter(!is.na(acc_medecin), !is.na(part_eloig)) |>
ggplot(aes(x = acc_medecin, y = part_eloig)) +
geom_point(color = vert, alpha = 0.7, size = 2) +
theme_circ() +
labs(x = "Part de la population ayant un médecin dans sa commune (%)", y = "Part de la population éloignée du panier courant (%)",
title = "Accès à un médecin et éloignement du panier courant")
vars <- c(nivvie_median_diff = "Niveau de vie médian", tx_pauvrete60_diff = "Taux de pauvreté", rpt_D9_D1_diff = "D9/D1", actcho = "Chômage",
actdip_BAC5 = "Bac+5", actdip_PEU = "Peu ou pas diplômés", act_cad = "Cadres", act_ouv = "Ouvriers", proprio = "Propriétaires",
age_moyen = "Âge moyen", pop_rur = "Rural", modtrans_voit = "Voiture", PPEN = "Part pensions")
cm <- cor(circ[names(vars)], use = "pairwise.complete.obs")
as_tibble(cm, rownames = "a") |>
pivot_longer(-a, names_to = "b", values_to = "r") |>
mutate(a = factor(vars[a], levels = vars), b = factor(vars[b], levels = rev(vars))) |>
ggplot(aes(x = a, y = b, fill = r)) +
geom_tile(color = "white") +
geom_text(aes(label = sprintf("%.1f", r)), size = 2.8) +
scale_fill_gradient2(low = vert, mid = "white", high = rose, limits = c(-1, 1), name = "Corrélation") +
theme_circ() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = NULL, y = NULL, title = "Corrélations entre indicateurs de circonscription")
circ |>
select(circo, nom_circo, Inscrit_22, pop, age_moyen, nivvie_median_diff, tx_pauvrete60_diff, actcho, actdip_BAC5, proprio) |>
print_table_conditional()dico |> print_table_conditional()