Last data update: 01 oct. 2026, 22:51
Last compile: 01 oct. 2026, 22:53
Source : DGAC, data.gouv.fr. Liaisons point à point (départs et arrivées confondus) entre deux aéroports (codes OACI AAAA_BBBB). Pour respecter le secret statistique, seules les liaisons avec au moins trois opérateurs, dont aucun ne dépasse 85 % du trafic, sont publiées : les grandes liaisons nationales sont donc bien couvertes, une partie du trafic de compagnies en situation de monopole ne l’est pas.
`trafic-aerien-paires-aeroports` |>
filter(year(date) == 2025) |>
group_by(PAP, PAP1_LABEL, PAP2_LABEL) |>
summarise(pax = sum(PAP_PAX, na.rm = TRUE) / 1e6, .groups = "drop") |>
slice_max(pax, n = 15) |>
mutate(liaison = fct_reorder(paste(str_to_title(PAP1_LABEL), "-", str_to_title(PAP2_LABEL)), pax)) |>
ggplot(aes(x = liaison, y = pax)) +
geom_col(fill = "#08519c") + coord_flip() + theme_minimal() +
xlab("") + ylab("Millions de passagers (aller + retour)")
nationales <- `trafic-aerien-paires-aeroports` |>
filter(str_sub(PAP, 1, 2) == "LF", str_sub(PAP, 6, 7) == "LF") |>
mutate(annee = year(date))
top_nat <- nationales |> filter(annee == 2019) |>
group_by(PAP) |> summarise(pax = sum(PAP_PAX, na.rm = TRUE)) |> slice_max(pax, n = 8) |> pull(PAP)
nationales |>
filter(PAP %in% top_nat, annee >= 2010) |>
group_by(annee, PAP, PAP1_LABEL, PAP2_LABEL) |>
summarise(pax = sum(PAP_PAX, na.rm = TRUE) / 1e6, .groups = "drop") |>
mutate(date = as.Date(paste0(annee, "-01-01")),
liaison = paste(str_to_title(PAP1_LABEL), "-", str_to_title(PAP2_LABEL))) |>
ggplot(aes(x = date, y = pax, color = liaison)) +
geom_line() + theme_minimal() + xlab("") + ylab("Millions de passagers") +
scale_x_date(date_breaks = "5 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank()) +
guides(color = guide_legend(ncol = 2))
nationales |>
filter(annee %in% c(2019, 2025), PAP %in% top_nat) |>
group_by(annee, PAP, PAP1_LABEL, PAP2_LABEL) |>
summarise(pax = sum(PAP_PAX, na.rm = TRUE), .groups = "drop") |>
pivot_wider(names_from = annee, values_from = pax, names_prefix = "a") |>
mutate(variation = a2025 / a2019 - 1) |>
filter(is.finite(variation)) |>
mutate(liaison = fct_reorder(paste(str_to_title(PAP1_LABEL), "-", str_to_title(PAP2_LABEL)), variation)) |>
ggplot(aes(x = liaison, y = variation, fill = variation > 0)) +
geom_col() + coord_flip() + theme_minimal() + xlab("") +
ylab("Passagers 2025 par rapport à 2019") +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
scale_fill_manual(values = c("#b2182b", "#2166ac")) +
theme(legend.position = "none")
`trafic-aerien-paires-aeroports` |>
filter(year(date) == 2025) |>
group_by(PAP, PAP1_LABEL, PAP2_LABEL, PAP_DIST) |>
summarise(pax = sum(PAP_PAX, na.rm = TRUE), .groups = "drop") |>
filter(pax > 0, !is.na(PAP_DIST)) |>
ggplot(aes(x = PAP_DIST, y = pax)) +
geom_point(alpha = 0.5, color = "#08519c") + theme_minimal() +
scale_x_log10(labels = fr) + scale_y_log10(labels = fr) +
xlab("Distance (km, échelle log)") + ylab("Passagers en 2025 (échelle log)")
`trafic-aerien-paires-aeroports` |>
mutate(annee = year(date)) |>
group_by(annee) |>
summarise(liaisons = n_distinct(PAP)) |>
mutate(date = as.Date(paste0(annee, "-01-01"))) |>
ggplot(aes(x = date, y = liaisons)) +
geom_line() + geom_point(size = 0.8) + theme_minimal() + xlab("") + ylab("Nombre de liaisons") +
scale_x_date(date_breaks = "5 years", labels = date_format("%Y"))