Dette des administrations publiques au sens de Maastricht - econ-gen-dette-trim-adm-pub-2

Data - INSEE

variable

Code
`econ-gen-dette-trim-adm-pub-2` %>%
  group_by(variable) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
variable Nobs
dette 119
dette_PIB 119

date

Code
`econ-gen-dette-trim-adm-pub-2` %>%
  group_by(date) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(date)) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Comparer GFD et Insee

Tous

Code
df_dette <- gfd_france %>%
  mutate(source = "Global Financial Data") %>%
  bind_rows(insee_A_france %>%
              mutate(source = "Insee, Annuelles")) %>%
  bind_rows(insee_Q_france %>%
              mutate(source = "Insee, Trimestrielles")) %>%
  bind_rows(imf_france %>%
              mutate(source = "FMI")) %>%
  mutate(dette_anneePIB = dette_PIB / 100) %>%
  arrange(date)

# --- Palette sobre & daltonisme-friendly (Okabe–Ito) --------------------------
pal <- c(
  "FMI"                          = "#0072B2",
  "Insee, Trimestrielles"= "#E69F00",
  "Insee, Annuelles"     = "#009E73",
  "Global Financial Data"        = "#D55E00"
)

# --- Déduire la fréquence pour styliser différemment annuel vs trimestriel ----
df_plot <- df_dette %>%
  mutate(freq = case_when(
    month(date) %in% c(3, 6, 9) ~ "Trimestriel",
    month(date) == 12           ~ "Annuel",
    TRUE                        ~ "Autre"
  )) %>%
  mutate(
    source = factor(source, levels = names(pal)),
    freq   = factor(freq, levels = c("Trimestriel", "Annuel", "Autre"))
  )

p <- ggplot(df_plot, aes(x = date, y = dette_PIB, color = source)) +
  geom_line(aes(linetype = freq), linewidth = 0.9, na.rm = TRUE) +
  geom_point(aes(shape = freq), size = 1.6, alpha = 0.8, na.rm = TRUE) +
  scale_color_manual(
    values = pal,
    guide = guide_legend(
      title = "Source",
      nrow = 1,
      order = 1
    )
  ) +
  scale_linetype_manual(
    values = c("Trimestriel" = "solid", "Annuel" = "dashed", "Autre" = "dotdash"),
    guide = guide_legend(
      title = "Fréquence",
      nrow = 1,
      order = 2
    )
  ) +
  scale_shape_manual(
    values = c("Trimestriel" = 16, "Annuel" = 17, "Autre" = 15),
    guide = guide_legend(
      title = "Fréquence",
      nrow = 1,
      order = 2
    )
  ) +
  scale_x_date(
    breaks = seq(as.Date("1800-01-01"), as.Date("2030-01-01"), by = "20 years"),
    labels = scales::date_format("%Y"),
    expand = expansion(mult = c(0.01, 0.02))
  ) +
  scale_y_continuous(
    name = "Dette publique (% du PIB)",
    breaks = scales::pretty_breaks(n = 8)
  ) +
  labs(
    title = "Dette publique / PIB (1851–)",
    caption = "Sources : FMI, Insee (trimestriel et annuel), Global Financial Data."
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title      = element_text(face = "bold"),
    legend.position = "bottom",
    legend.box      = "vertical",    # ← empile les deux lignes
    legend.title    = element_text(face = "bold"),
    legend.text     = element_text(size = 11),
    panel.grid.minor = element_blank(),
    axis.title.x    = element_blank()
  )

p + scale_y_continuous(
  name = "Dette publique (années de PIB)",
  labels = function(x) sprintf("%.2f", x/100),
  breaks = pretty_breaks(n = 8)
)

Dette/PIB

Tous

Code
df_dette <- `econ-gen-dette-trim-adm-pub-2` %>%
  filter(variable == "dette_PIB") %>%
  rename(dette_PIB = value) %>%
  select(-variable) %>%
  mutate(dette_anneePIB = dette_PIB / 100) %>%
  arrange(date)
         
# --- Graphique ---
df_dette  %>%
  ggplot(aes(x = date, y = dette_anneePIB)) +
  geom_line(color = "#00205B", linewidth = 1.1) +
  geom_area(fill = "#00205B", alpha = 0.1) +
  geom_point(
    data = df_dette %>% slice_tail(n = 1),
    color = "#00205B", size = 2
  ) +
  geom_text(
    data = df_dette %>% slice_tail(n = 1),
    aes(label = paste0(round(dette_anneePIB, 2), " année de PIB")),
    hjust = 0.5, vjust = -0.5, color = "#00205B", size = 3.8
  ) +
  scale_x_date(
    breaks = seq(as.Date("1995-01-01"), as.Date("2025-12-31"), by = "2 years"),
    labels = date_format("%Y"),
    expand = expansion(mult = c(0.01, 0.12))
  ) +
  scale_y_continuous(
    name = "Dette publique (en années de PIB)",
    breaks = seq(0.4, 1.2, 0.1),
    labels = function(x) sprintf("%.1f", x)
  ) +
  labs(
    title = "Dette publique française depuis 1995",
    subtitle = "Exprimée en années de PIB (et non en % du PIB)",
    caption = "Source : Insee"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    panel.grid.minor = element_blank(),
    axis.title.x = element_blank(),
    axis.text.x = element_text(angle = 0, size = 10),
    plot.caption = element_text(size = 9, color = "gray40", hjust = 0)
  )

1995-

Code
df_dette <- `econ-gen-dette-trim-adm-pub-2` %>%
  filter(variable == "dette_PIB") %>%
  rename(dette_PIB = value) %>%
  mutate(dette_anneePIB = dette_PIB / 100) %>%
  arrange(date)
         
# --- Graphique ---
df_dette  %>%
  ggplot(aes(x = date, y = dette_anneePIB)) +
  geom_line(color = "#00205B", linewidth = 1.1) +
  geom_area(fill = "#00205B", alpha = 0.1) +
  geom_point(
    data = df_dette %>% slice_tail(n = 1),
    color = "#00205B", size = 2
  ) +
  geom_text(
    data = df_dette %>% slice_tail(n = 1),
    aes(label = paste0(round(dette_anneePIB, 2), " année de PIB")),
    hjust = 0.5, vjust = -0.5, color = "#00205B", size = 3.8
  ) +
  scale_x_date(
    breaks = seq(as.Date("1995-01-01"), as.Date("2025-12-31"), by = "2 years"),
    labels = date_format("%Y"),
    expand = expansion(mult = c(0.01, 0.12))
  ) +
  scale_y_continuous(
    name = "Dette publique (en années de PIB)",
    breaks = seq(0, 1.2, 0.2),
    labels = function(x) sprintf("%.1f", x)
  ) +
  labs(
    title = "Dette publique française depuis 1995",
    subtitle = "Exprimée en années de PIB (et non en % du PIB)",
    caption = "Source : Insee"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    panel.grid.minor = element_blank(),
    axis.title.x = element_blank(),
    axis.text.x = element_text(angle = 0, size = 10),
    plot.caption = element_text(size = 9, color = "gray40", hjust = 0)
  )