Last data update: 03 oct. 2026, 10:39
Last compile: 03 oct. 2026, 10:39
fig1 |>
filter(str_detect(indicateur, "Solde naturel|Solde migratoire|Ajustements")) |>
mutate(indicateur = str_remove(indicateur, " \\(a\\)-\\(b\\)")) |>
ggplot(aes(x = factor(annee), y = valeur, fill = indicateur)) +
geom_col() +
geom_hline(yintercept = 0, color = "grey30") +
scale_fill_manual(values = c("Solde naturel" = bleu, "Solde migratoire" = vert,
"Ajustements statistiques" = "grey60"), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Milliers",
title = "Contributions à la variation de la population",
subtitle = "solde naturel, solde migratoire et ajustements statistiques, 2020-2025")
fig1 |>
filter(indicateur == "Population au 1er janvier") |>
ggplot(aes(x = annee, y = valeur / 1000)) +
geom_line(color = bleu, linewidth = 1) +
geom_point(aes(shape = provisoire), color = bleu, size = 2.5, fill = "white") +
scale_shape_manual(values = c("FALSE" = 16, "TRUE" = 21), guide = "none") +
theme_demo() +
labs(x = NULL, y = "Millions d'habitants",
title = "Population au 1er janvier", subtitle = "France hors Mayotte puis France, 2020-2026 (p : provisoire)")
fig2a |>
filter(groupe == "France hors Mayotte") |>
ggplot(aes(x = annee, y = valeur / 1000, color = indicateur)) +
geom_line(linewidth = 1) +
scale_color_manual(values = c("Naissances" = bleu, "Décès" = rose), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Milliers", title = "Naissances et décès", subtitle = "France hors Mayotte, depuis 1965")
fig2b |>
filter(groupe == "France hors Mayotte") |>
ggplot(aes(x = annee, y = valeur / 1000)) +
geom_col(aes(fill = valeur < 0), show.legend = FALSE) +
scale_fill_manual(values = c("FALSE" = bleu, "TRUE" = rose)) +
geom_hline(yintercept = 0, color = "grey30") +
theme_demo() +
labs(x = NULL, y = "Milliers", title = "Solde naturel", subtitle = "France hors Mayotte, depuis 1965")
fig3 |>
filter(!str_detect(indicateur, "ICF")) |>
ggplot(aes(x = annee, y = valeur, color = indicateur)) +
geom_line(linewidth = 1) +
geom_hline(yintercept = 100, color = "grey60", linetype = "dashed") +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_demo(10) +
labs(x = NULL, y = "Indice base 100 en 1995",
title = "Naissances et nombre de femmes en âge d'avoir des enfants", subtitle = "base 100 en 1995") +
guides(color = guide_legend(ncol = 1))
fig3 |>
filter(str_detect(indicateur, "ICF")) |>
ggplot(aes(x = annee, y = valeur / 100)) +
geom_line(color = bleu, linewidth = 1) +
geom_hline(yintercept = 2.1, color = rose, linetype = "dashed") +
annotate("text", x = 2000, y = 2.13, label = "seuil de renouvellement (2,1)", color = rose, size = 3.5) +
theme_demo() +
labs(x = NULL, y = "Enfants par femme", title = "Indicateur conjoncturel de fécondité", subtitle = "depuis 1995")
fig4b |>
ggplot(aes(x = annee, y = valeur, color = indicateur)) +
geom_line(linewidth = 1) +
scale_color_brewer(palette = "Set1", name = NULL) +
theme_demo() +
labs(x = NULL, y = "Naissances pour 100 femmes",
title = "Taux de fécondité par groupe d'âges", subtitle = "depuis 1995")
fig4a |>
filter(str_detect(indicateur, "Âge conjoncturel")) |>
ggplot(aes(x = annee, y = valeur)) +
geom_line(color = bleu, linewidth = 1) +
geom_point(aes(shape = provisoire), color = bleu, size = 2.5, fill = "white") +
scale_shape_manual(values = c("FALSE" = 16, "TRUE" = 21), guide = "none") +
theme_demo() +
labs(x = NULL, y = "Années", title = "Âge conjoncturel moyen à l'accouchement", subtitle = "depuis 2005")
fig5b |>
mutate(sexe = if_else(str_detect(indicateur, "femmes"), "Femmes", "Hommes"),
age = if_else(str_detect(indicateur, "60 ans"), "À 60 ans", "À la naissance")) |>
ggplot(aes(x = annee, y = valeur, color = sexe)) +
geom_line(linewidth = 1) +
facet_wrap(~ age, scales = "free_y") +
scale_color_manual(values = c("Femmes" = rose, "Hommes" = bleu), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Années", title = "Espérance de vie à la naissance et à 60 ans", subtitle = "depuis 1995")
fig5a |>
filter(annee == max(annee)) |>
mutate(sexe = if_else(str_detect(groupe, "femmes"), "Femmes", "Hommes"),
indicateur = fct_inorder(indicateur)) |>
ggplot(aes(x = indicateur, y = valeur, fill = sexe)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("Femmes" = rose, "Hommes" = bleu), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Années restant à vivre",
title = "Espérance de vie à divers âges", subtitle = "dernière année disponible (provisoire)")
fig6a |>
mutate(valeur = if_else(sexe == "Hommes", -valeur, valeur), annee = factor(annee)) |>
ggplot(aes(x = age, y = valeur, fill = sexe)) +
geom_col(width = 1) +
coord_flip() +
facet_wrap(~ annee, nrow = 1) +
scale_y_continuous(labels = ~ scales::comma(abs(.x), big.mark = " ")) +
scale_fill_manual(values = c("Femmes" = rose, "Hommes" = bleu), name = NULL) +
theme_demo(10) +
labs(x = "Âge au 1er janvier", y = "Milliers", title = "Pyramide des âges", subtitle = "2006, 2016 et 2026")
fig6b |>
filter(indicateur != "Ensemble", indicateur != "dont 75 ans ou plus") |>
mutate(indicateur = fct_relevel(indicateur, "65 ans ou plus", "De 20 à 64 ans", "Moins de 20 ans")) |>
ggplot(aes(x = factor(annee), y = valeur / 100, fill = indicateur)) +
geom_col() +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_fill_manual(values = c("Moins de 20 ans" = vert, "De 20 à 64 ans" = bleu, "65 ans ou plus" = rose), name = NULL) +
theme_demo() +
labs(x = NULL, y = NULL, title = "Répartition de la population par grands groupes d'âges", subtitle = "au 1er janvier")
fig7 |>
filter(str_detect(indicateur, "Ensemble")) |>
ggplot(aes(x = annee, y = valeur / 1000, color = groupe)) +
geom_line(linewidth = 1) +
scale_color_manual(values = c("Mariages" = bleu, "Pacs" = rose), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Milliers", title = "Nombre de mariages et de pacs", subtitle = "depuis 2000")
tc1 |>
filter(indicateur == "Population au 1er janvier") |>
ggplot(aes(x = annee, y = valeur / 1e6)) +
geom_line(color = bleu, linewidth = 1) +
theme_demo() +
labs(x = NULL, y = "Millions d'habitants", title = "Population au 1er janvier depuis 1982")
tc4 |>
filter(indicateur %in% c("Femmes", "Hommes"), str_detect(groupe, "sexe différent")) |>
ggplot(aes(x = annee, y = valeur, color = indicateur)) +
geom_line(linewidth = 1) +
scale_color_manual(values = c("Femmes" = rose, "Hommes" = bleu), name = NULL) +
theme_demo() +
labs(x = NULL, y = "Années", title = "Âge moyen au mariage", subtitle = "mariages de personnes de sexe différent")
tc5 |>
filter(str_detect(indicateur, "Indicateur conjoncturel|Âge conjoncturel")) |>
mutate(indicateur = if_else(str_detect(indicateur, "Indicateur"), "icf", "age")) |>
select(pays, indicateur, valeur) |>
pivot_wider(names_from = indicateur, values_from = valeur) |>
ggplot(aes(x = age, y = icf, label = pays)) +
geom_point(aes(color = pays == "France"), size = 2, show.legend = FALSE) +
ggrepel::geom_text_repel(aes(color = pays == "France"), size = 3, max.overlaps = 30, show.legend = FALSE) +
scale_color_manual(values = c("FALSE" = "grey40", "TRUE" = rose)) +
theme_demo() +
labs(x = "Âge conjoncturel moyen à l'accouchement (années)", y = "Enfants par femme",
title = "Fécondité en Europe, 2023", subtitle = "indicateur conjoncturel de fécondité et âge à l'accouchement")