Récapitulatif des séries des comptes d’agents - t_recapAgent_val

Données - INSEE

Last observation: Q2 2026 (N = 374)

First observation: Q1 1949 (N = 355)

Last data update: 03 sept. 2026, 05:31

Last compile: 04 sept. 2026, 02:30

Données

  • Comptes nationaux trimestriels au 4ème trimestre 2023. [html] / [xls]

date

Code
t_recapAgent_val |>
  group_by(date) |>
  summarise(Nobs = n()) |>
  arrange(desc(date)) |>
  print_table_conditional()

2017T2-

Table

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(date %in% c(as.Date("2017-04-01"), max(date) - months(3), max(date))) |>
  spread(date, value) |>
  print_table_conditional()

D41 - Intérêts

2017T2-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D41") |>
  filter(date %in% c(as.Date("2017-04-01"), max(date) - months(3), max(date))) |>
  spread(date, value) |>
  print_table_conditional()
sheet column Compte operation Operation1 Operation2 2017-04-01 2026-01-01 2026-04-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.351 0.901 0.960
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 10.253 18.191 18.916
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.165 0.686 0.710
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.046 0.161 0.174
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 3.142 12.723 12.751
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 3.148 11.311 11.368
RdM 10 NA D41 En provenance du reste du monde Intérêts 13.625 43.385 44.218
RdM 31 NA D41 à destination du reste du monde Intérêts 15.033 55.179 56.808
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 37.052 115.827 119.533
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 25.247 105.506 109.108
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 14.796 28.744 29.685
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 18.219 35.508 36.662

2021T2-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D41") |>
  filter(date %in% c(as.Date("2021-04-01"), max(date))) |>
  spread(date, value) |>
  print_table_conditional()
sheet column Compte operation Operation1 Operation2 2021-04-01 2026-04-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.142 0.960
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 8.005 18.916
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.128 0.710
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.028 0.174
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 2.301 12.751
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 2.304 11.368
RdM 10 NA D41 En provenance du reste du monde Intérêts 12.536 44.218
RdM 31 NA D41 à destination du reste du monde Intérêts 11.023 56.808
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 30.652 119.533
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 20.789 109.108
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 15.924 29.685
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 16.508 36.662

D42 - Dividendes

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42") |>
  filter(date %in% c(as.Date("2017-04-01"), max(date) - months(3), max(date))) |>
  spread(date, value) |>
  print_table_conditional()
sheet column Compte operation Operation1 Operation2 2017-04-01 2026-01-01 2026-04-01
APU 25 Compte d'affectation des revenus primaires D42 Reçu Dividendes 1.860 2.047 3.121
Menages 43 Compte d'affectation des revenus primaires D42 Reçu Dividendes 8.095 16.014 16.350
RdM 11 NA D42 En provenance du reste du monde Dividendes 13.898 31.566 31.692
RdM 32 NA D42 à destination du reste du monde Dividendes 11.212 19.756 19.613
SF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 12.135 24.818 25.464
SF 22 Compte d'affectation des revenus primaires D42 Versé Dividendes 10.181 16.480 17.998
SNF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 37.503 60.989 61.308
SNF 23 Compte d'affectation des revenus primaires D42 Versé Dividendes 46.726 75.578 76.166

B9NF - Besoin (-) ou Capacité (+) de financement

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  filter(date %in% c(as.Date("2017-04-01"), max(date) - months(3), max(date))) |>
  spread(date, value) |>
  print_table_conditional()
sheet column Compte operation Operation1 Operation2 2017-04-01 2026-01-01 2026-04-01
APU 64 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -18.544 -38.734 -39.075
ISBLSM 35 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 0.080 -0.152 -0.255
Menages 78 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 14.447 43.064 40.418
RdM 50 NA B9NF Besoin (-) ou Capacité(+) de financement de la Nation NA -2.990 -5.634 -4.849
SF 52 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -1.562 -4.714 -5.813
SNF 46 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 2.589 -5.098 -0.123

B9NF - Besoin (-) ou Capacité (+) de financement

Tous

Md€

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  ggplot() + geom_line(aes(x = date, y = value, color = paste0(sheet, " - ", Operation1))) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-200, 100, 10),
                labels = dollar_format(pre = "", su = " Md€")) +
  theme(legend.position = c(0.4, 0.8),
        legend.title = element_blank())

% du PIB

Tous

Basique
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  transmute(date, value, gdp, sheet, value_gdp = value/gdp) |>
  
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

2000

Basique
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2000-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")

Autre division
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2000-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations Publiques` = `APU`, `Sociétés (SNF + SF)` = SNF + SF, `Ménages` = Menages) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2000-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

2007-

Basique
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2007-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")+
  geom_hline(yintercept = 0, linetype ="dashed")

Autre division
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2007-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations Publiques` = `APU`, `Sociétés (SNF + SF)` = SNF + SF, `Ménages` = Menages) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype ="dashed")

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2007-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

2013-

Basique
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2013-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("2013-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")+
  geom_hline(yintercept = 0, linetype ="dashed")

Autre division
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2013-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations Publiques` = `APU`, `Sociétés (SNF + SF)` = SNF + SF, `Ménages` = Menages) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")+
  geom_hline(yintercept = 0, linetype ="dashed")

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2013-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

2017-

Basique
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("2017-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.84),
        legend.title = element_blank(),
        legend.direction = "horizontal")+
  geom_hline(yintercept = 0, linetype ="dashed")

Autre division
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations Publiques` = `APU`, `Sociétés (SNF + SF)` = SNF + SF, `Ménages` = Menages) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed")

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

Sans sociétés
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.7, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% group_by(sheet) %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

2018-

Avec label
Code
# --- Votre préparation de données inchangée -----------------------------------
df_long <- t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  transmute(date, value = value / gdp, sheet) |>
  tidyr::pivot_wider(names_from = sheet, values_from = value) |>
  transmute(
    date,
    `Administrations\npubliques` = APU,
    `Sociétés\n(SNF + SF)` = SNF + SF,
    `Ménages` = Menages,
    `Reste du\nmonde` = RdM
  ) |>
  tidyr::pivot_longer(-date, names_to = "sheet", values_to = "value") |>
  arrange(sheet, date)

# --- Helpers dynamiques pour libellés -----------------------------------------
# Libellé "1er/2ème/3ème/4ème trimestre YYYY" en français
fr_trim_label <- function(d) {
  q <- lubridate::quarter(d)
  y <- lubridate::year(d)
  ord <- c("1er", "2ème", "3ème", "4ème")[q]
  paste0(ord, " trimestre ", y)
}

last_date  <- max(df_long$date, na.rm = TRUE)               # ex. 2025-04-01
last_label <- fr_trim_label(last_date)                      # "2ème trimestre 2025"
start_year <- lubridate::year(min(df_long$date, na.rm = TRUE))

# --- Points de départ/arrivée pour étiquettes --------------------------------
last_pts <- df_long |>
  group_by(sheet) |>
  slice_max(order_by = date, n = 1, with_ties = FALSE) |>
  ungroup() |>
  mutate(lbl = percent(value, accuracy = 0.01, style_positive = "plus"))

first_pts <- df_long |>
  group_by(sheet) |>
  slice_min(order_by = date, n = 1, with_ties = FALSE) |>
  ungroup() |>
  mutate(lbl = percent(value, accuracy = 0.01, style_positive = "plus"))

# --- Plot ---------------------------------------------------------------------
pal <- c(
  "Administrations\npubliques" = "#E69F00",
  "Sociétés\n(SNF + SF)"       = "#56B4E9",
  "Ménages"                    = "#009E73",
  "Reste du\nmonde"            = "#CC79A7"
)

ggplot(df_long, aes(date, value, color = sheet)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_line(linewidth = 1.1, na.rm = TRUE) +
  geom_label_repel(
    data = last_pts,
    aes(label = lbl),
    size = 3.4, segment.size = 0.3,
    label.padding = unit(0.15, "lines"),
    label.r = unit(0.15, "lines"),
    fill = "white", show.legend = FALSE
  ) +
  geom_label_repel(
    data = first_pts,
    aes(label = lbl),
    size = 3.4, segment.size = 0.3,
    label.padding = unit(0.15, "lines"),
    label.r = unit(0.15, "lines"),
    fill = "white", show.legend = FALSE
  ) +
  scale_color_manual(values = pal, NULL) +
  scale_y_continuous(
    breaks = 0.01 * seq(-100, 140, 2),
    labels = function(x) percent(x, accuracy = 1, style_positive = "plus")
  ) +
  scale_x_date(
    date_breaks = "1 year",
    date_labels = "%Y",
    expand = expansion(mult = c(0, 0.06))
  ) +
  labs(
    x = NULL,
    y = "Besoin (–) ou capacité (+) de financement\n% du PIB",
    title = paste0(
      "Capacité/Besoin de financement par secteur institutionnel"
    ),
    subtitle = paste0("Depuis ", start_year, " (trimestriel)"),
    caption  = paste0("Sources: Insee, comptes nationaux du ", last_label, ".")
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold"),
    legend.position = "top",
    legend.justification = "left",
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(linewidth = 0.2),
    panel.grid.major.y = element_line(linewidth = 0.2),
    axis.title.y = element_text(margin = margin(r = 8))
  )

Avec label, Mds€
Code
# 1) Prep ----------------------------------------------------------------------
df_long <- t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2017-01-01")) |>
  transmute(date, value = value, sheet) |>
  tidyr::pivot_wider(names_from = sheet, values_from = value) |>
  transmute(
    date,
    `Administrations\npubliques` = APU,
    `Sociétés\n(SNF + SF)` = SNF + SF,
    `Ménages` = Menages,
    `Reste du\nmonde` = RdM
  ) |>
  tidyr::pivot_longer(-date, names_to = "sheet", values_to = "value") |>
  arrange(sheet, date)


# --- Helpers dynamiques pour libellés -----------------------------------------
# Libellé "1er/2ème/3ème/4ème trimestre YYYY" en français
fr_trim_label <- function(d) {
  q <- lubridate::quarter(d)
  y <- lubridate::year(d)
  ord <- c("1er", "2ème", "3ème", "4ème")[q]
  paste0(ord, " trimestre ", y)
}

last_date  <- max(df_long$date, na.rm = TRUE)               # ex. 2025-04-01
last_label <- fr_trim_label(last_date)                      # "2ème trimestre 2025"
start_year <- lubridate::year(min(df_long$date, na.rm = TRUE))


# Last obs per series for labels
last_pts <- df_long |>
  group_by(sheet) |>
  slice_max(order_by = date, n = 1, with_ties = FALSE) |>
  ungroup() |>
  mutate(lbl = paste0(round(value, 1), " Md€"))

# First obs per series for labels
first_pts <- df_long |>
  group_by(sheet) |>
  slice_min(order_by = date, n = 1, with_ties = FALSE) |>
  ungroup() |>
  mutate(lbl = paste0(round(value, 1), " Md€"))

# 2) Plot ----------------------------------------------------------------------
# Okabe–Ito palette (colorblind-friendly)
pal <- c(
  "Administrations\npubliques" = "#E69F00",
  "Sociétés\n(SNF + SF)"       = "#56B4E9",
  "Ménages"                    = "#009E73",
  "Reste du\nmonde"            = "#CC79A7"
)

ggplot(df_long, aes(date, value, color = sheet)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_line(linewidth = 1.1, na.rm = TRUE) +
  geom_label_repel(
    data = last_pts,
    aes(label = lbl),
    size = 3.4,
    segment.size = 0.3,
    label.padding = unit(0.15, "lines"),
    label.r = unit(0.15, "lines"),
    fill = "white",
    show.legend = FALSE
  ) +
  geom_label_repel(
    data = first_pts,
    aes(label = lbl),
    size = 3.4,
    segment.size = 0.3,
    label.padding = unit(0.15, "lines"),
    label.r = unit(0.15, "lines"),
    fill = "white",
    show.legend = FALSE
  ) +
  scale_color_manual(values = pal, NULL) +
  scale_y_continuous(
    breaks = seq(-100, 140, 10),
    labels = dollar_format(pre = "", su = "Md€", acc = 0.1)
  ) +
  scale_x_date(
    date_breaks = "1 year",
    date_labels = "%Y",
    expand = expansion(mult = c(0, 0.06))  # space for labels on the right
  ) +
  labs(
    x = NULL,
    y = "Besoin (–) ou capacité (+) de financement\nMilliards",
    title = "Capacité/Besoin de financement par secteur institutionnel",
    subtitle = paste0("Depuis ", year(min(df_long$date)), " (trimestriel)"),
    caption = paste0("Sources: Insee, comptes nationaux du ", last_label)
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold"),
    legend.position = "top",
    legend.justification = "left",
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(linewidth = 0.2),
    panel.grid.major.y = element_line(linewidth = 0.2),
    axis.title.y = element_text(margin = margin(r = 8))
  )

2019-

Avec label
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2019-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Sociétés\n(SNF + SF)` = SNF + SF, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.65, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

Sans sociétés
Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF") |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2019-01-01")) |>
  transmute(date, value = value/gdp, sheet) |>
  spread(sheet, value) |>
  transmute(date, `Administrations\nPubliques` = `APU`, `Ménages` = Menages, `Reste du\nMonde` = RdM) |>
  gather(sheet, value, -date) |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value, color = sheet)) +
  xlab("") + ylab("Besoin (-) ou Capacité (+) de financement (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.65, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label_repel(data = . %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = value, color = sheet, label = percent(value, acc = 0.1)))

Déficit extérieur vs déficit public

% du PIB

Tous

Code
library(dplyr)
library(ggplot2)
library(scales)
# optional
# install.packages("ggrepel")
# library(ggrepel)

# 1) Préparer les données une fois pour toutes
plot_df <- t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  mutate(
    Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (balance courante)"),
    value_gdp = value / gdp
  ) |>
  select(date, value_gdp, Sheet) |>
  arrange(date)

save(plot_df, file = "~/github/GraphOftheWeek_Relecture/relecture/data/data_2026_08.rds")

# 2) Dernières observations par série (pour étiquettes)
last_pts <- plot_df |>
  group_by(Sheet) |>
  filter(date == max(date, na.rm = TRUE)) |>
  ungroup()

# 3) Palette simple et cohérente
pal <- c("Solde public" = "#1f77b4", "Solde extérieur (balance courante)" = "#ff7f0e")

# --- Helpers dynamiques pour libellés -----------------------------------------
# Libellé "1er/2ème/3ème/4ème trimestre YYYY" en français
fr_trim_label <- function(d) {
  q <- lubridate::quarter(d)
  y <- lubridate::year(d)
  ord <- c("1er", "2ème", "3ème", "4ème")[q]
  paste0(ord, " trimestre ", y)
}

last_date  <- max(plot_df$date, na.rm = TRUE)               # ex. 2025-04-01
last_label <- fr_trim_label(last_date)                      # "2ème trimestre 2025"
start_year <- lubridate::year(min(plot_df$date, na.rm = TRUE))

# 4) Le graphique
p <- ggplot(plot_df, aes(x = date, y = value_gdp, color = Sheet)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_line(linewidth = 1.1) +
  # points fin de série (pour que l’étiquette "accroche" un point)
  geom_point(data = last_pts, size = 2.2) +
  # ---- Choisir l'une des deux options d'étiquetage ----
  # (A) Sans ggrepel (base)
  geom_label(
    data = last_pts,
    aes(label = label_percent(accuracy = 0.1)(value_gdp)),
    label.padding = unit(0.15, "lines"),
    label.size = 0,
    fill = "white",
    label.r = unit(0.15, "lines"),
    vjust = -0.8,
    show.legend = FALSE
  ) +
  scale_color_manual(values = pal, guide = guide_legend(title = NULL)) +
  scale_y_continuous(
    labels = label_percent(accuracy = 1),
    breaks = seq(-0.5, 0.1, by = 0.01),  # -10% à +10% (ajustez selon vos données)
    expand = expansion(mult = c(0.02, 0.05))
  ) +
  scale_x_date(
    date_breaks = "5 years",
    date_labels = "%Y",
    expand = expansion(mult = c(0.01, 0.05))
  ) +
  labs(
    x = NULL,
    y = "% du PIB",
    title = "Solde public et solde extérieur (% du PIB)",
    subtitle = paste0("Comptes trimestriels du ", last_label),
    caption = paste0("Source : Insee, comptes du ", last_label)
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = c(0.25, 0.25),   # ou 'none' si vous préférez sans légende
    panel.grid.minor = element_blank(),
    plot.title = element_text(face = "bold"),
    plot.caption = element_text(color = "gray40")
  )

p

Code
save(plot_df, file = "~/github/GraphOftheWeek_Relecture/relecture/data/data_2026_08.rda")

1970-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  arrange(desc(date)) |>
  mutate(Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (Balance courante)"),
         value_gdp = value/gdp) |>
  filter(date >= as.Date("1970-01-01")) |>
  select(date, value_gdp, Sheet, value, gdp) |>
  ggplot() + geom_line(aes(x = date, y = value_gdp, color = Sheet)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.3),
        legend.title = element_blank()) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label(data = . %>% group_by(Sheet) %>% filter(date == max(date)), aes(x = date, y = value_gdp, color = Sheet, label = percent(value_gdp)))

1950-1960: De gaulle

  • 10 août 1957 (franc Gaillard)7 : dévaluation « déguisée » de 20 % par le président du Conseil Félix Gaillard, laquelle fut légalisée en juin 1958.

  • En juin 1958, Charles de Gaulle valide une dévaluation de 20 %. Elle est considérée comme une réussite.

  • En 1958 la France se trouvait dans une situation particulièrement difficile, malgré l’ ” opération 20 % ” réalisée par M. Félix Gaillard durant l’été 1957 (dévaluation déguisée ayant pris la forme d’une prime aux exportations et d’une taxation de la plupart des importations), malgré aussi l’” opération vérité des prix ” qui tendait à réduire la consommation intérieure en augmentant les tarifs publics pour freiner l’inflation.

https://www.lemonde.fr/archives/article/1969/08/11/la-devaluation-de-1958-un-outil-contre-l-inflation-et-pour-l-ouverture-des-frontieres_2410945_1819218.html#:~:text=Le%20déficit%20budgétaire%20de%20l,(19%20millions%20de%20dollars).

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("1952-01-01"),
         date <= as.Date("1964-01-01")) |>
  mutate(Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (Balance courante)")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Sheet)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.73, 0.2),
        legend.title = element_blank()) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label(data = . %>% filter(date %in% c(as.Date("1960-01-01"), as.Date("1957-01-01"))), aes(x = date, y = value/gdp, color = Sheet, label = percent(value/gdp)))

1970-1980: Arrivée

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("1970-01-01"),
         date <= as.Date("1980-01-01")) |>
  mutate(Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (Balance courante)")) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Sheet)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.3),
        legend.title = element_blank()) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label(data = . %>% filter(date %in% c(max(date), as.Date("1976-07-01"))), aes(x = date, y = value/gdp, color = Sheet, label = percent(value/gdp)))

Sur 12 mois

Tous

Code
plot_df <- t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  group_by(sheet) |>
  mutate(value = rollsum(value, 4, fill = NA, align = "right"),
         gdp = rollsum(gdp, 4, fill = NA, align = "right")) |>
  arrange(desc(date)) |>
  mutate(Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (balance courante)"),
         value_gdp = value/gdp) |>
  select(date, value_gdp, Sheet) |>
  ungroup() |>
  add_row(date = as.Date("2025-10-01"),
          value_gdp = -0.054,
          Sheet = "Solde public",
          sheet = "APU")  |>
  arrange(desc(date),sheet)


save(plot_df, file = "~/github/GraphOftheWeek_Relecture/relecture/data/data_2026_08.rda")

plot_df |>
  ggplot() + geom_line(aes(x = date, y = value_gdp, color = Sheet)) +
  xlab("") + ylab("Capacité de financement, APU ou RdM\n% du PIB, sur 12 mois") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.3),
        legend.title = element_blank()) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label(data = . %>% group_by(Sheet) %>% filter(date == max(date)), aes(x = date, y = value_gdp, color = Sheet, label = percent(value_gdp)))

1990-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "B9NF",
         sheet %in% c("RdM", "APU")) |>
  left_join(gdp_quarterly, by = "date") |>
  group_by(sheet) |>
  mutate(value = rollsum(value, 4, fill = NA, align = "right"),
         gdp = rollsum(gdp, 4, fill = NA, align = "right")) |>
  arrange(desc(date)) |>
  mutate(Sheet = ifelse(sheet == "APU", "Solde public", "Solde extérieur (Balance courante)"),
         value_gdp = value/gdp) |>
  select(date, value_gdp, Sheet, value, gdp) |>
  filter(date >= as.Date("1990-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = value_gdp, color = Sheet)) +
  xlab("") + ylab("Capacité de financement, APU ou RdM\n% du PIB, sur 12 mois") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.15),
        legend.title = element_blank()) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_label(data = . %>% group_by(Sheet) %>% filter(date == max(date)), aes(x = date, y = value_gdp, color = Sheet, label = percent(value_gdp)))

D42 - Dividendes

Tous

Md€

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42") |>
  ggplot() + geom_line(aes(x = date, y = value, color = paste0(sheet, " - ", Operation1))) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10, 100, 10),
                labels = dollar_format(pre = "", su = " Md€")) +
  theme(legend.position = c(0.3, 0.7),
        legend.title = element_blank())

% du PIB

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42") |>
  left_join(gdp_quarterly, by = "date") |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = paste0(sheet, " - ", Operation1))) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.2, 0.7),
        legend.title = element_blank())

Nets

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42") |>
  transmute(date, value, Variable =  paste0(sheet, " - ", Operation1)) |>
  spread(Variable, value) |>
  transmute(date,
            `Administrations Publiques: Reçu` = `APU - Reçu`,
            `Ménages: Reçu` = `Menages - Reçu`,
            `Reste du Monde: En provenance - à destination` = `RdM - En provenance du reste du monde` - `RdM - à destination du reste du monde`,
            `Sociétés Financières: Reçu - Versé` = `SF - Reçu` - `SF - Versé`,
            `Sociétés Non Financières: Reçu - Versé` = `SNF - Reçu` - `SNF - Versé`) |>
  gather(Variable, value, -date) |>
  left_join(gdp_quarterly, by = "date") |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(acc = .1)) +
  theme(legend.position = c(0.5, 0.88),
        legend.title = element_blank())

D42, D44

% du PIB

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("D42", "D44"),
         sheet == "Menages") |>
  left_join(gdp_quarterly, by = "date") |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Operation2)) +
  xlab("") + ylab("Dividendes reçus, Ménages (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 0.1),
                labels = percent_format(acc = 0.1)) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank())

Mds€

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("D42", "D44"),
         sheet == "Menages") |>
  ggplot() + geom_line(aes(x = date, y = value, color = Operation2)) +
  xlab("") + ylab("Dividendes reçus, Ménages") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 1000, 2)) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank())

1999

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("D42", "D44", "B6", "D11"),
         sheet == "Menages") |>
  filter(date >= as.Date("1999-01-01")) |>
  group_by(Operation2) |>
  arrange(date) |>
  mutate(value = 100*value/value[1]) |>
  ggplot() + geom_line(aes(x = date, y = value, color = paste0(Operation1, Operation2))) +
  xlab("") + ylab("Dividendes reçus, Ménages") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 1000, 100)) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank())

1999

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("D51", "D611", "D613"),
         sheet == "Menages") |>
  filter(date >= as.Date("1999-01-01")) |>
  group_by(Operation2) |>
  arrange(date) |>
  mutate(value = 100*value/value[1]) |>
  ggplot() + geom_line(aes(x = date, y = value, color = paste0(Operation1, Operation2))) +
  xlab("") + ylab("Dividendes reçus, Ménages") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 1000, 10)) +
  theme(legend.position = c(0.3, 0.8),
        legend.title = element_blank())

B2 (y compris B3)

1999-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B2 (y compris B3)"),
         sheet == "Menages") |>
  filter(date >= as.Date("1999-01-01")) |>
  group_by(Operation2) |>
  arrange(date) |>
  mutate(value_index = 100*value/value[1]) |>
  ggplot() + geom_line(aes(x = date, y = value_index, color = paste0(Operation2))) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 1000, 10)) +
  theme(legend.position = c(0.3, 0.8),
        legend.title = element_blank()) +
  geom_label_repel(data = . %>% filter(date == max(date) | date == min(date)),
                   aes(x = date, y = value_index, label = round(value), color = Operation2))

2017-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B2 (y compris B3)"),
         sheet == "Menages") |>
  filter(date >= as.Date("2017-01-01")) |>
  group_by(Operation2) |>
  arrange(date) |>
  mutate(value_index = 100*value/value[1]) |>
  ggplot() + geom_line(aes(x = date, y = value_index, color = Operation2)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 1000, 5)) +
  theme(legend.position = c(0.3, 0.8),
        legend.title = element_blank()) +
  geom_label_repel(data = . %>% filter(date == max(date) | date == min(date)),
                   aes(x = date, y = value_index, label = round(value), color = Operation2))

Comptes des ménages

Dividendes

Md€

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42",
         sheet == "Menages") |>
  ggplot() + geom_line(aes(x = date, y = value, color = paste0(sheet, " - ", Operation1))) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10, 100, 2),
                labels = dollar_format(pre = "", su = " Md€")) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank())

% du PIB

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation == "D42",
         sheet == "Menages") |>
  left_join(gdp_quarterly, by = "date") |>
  ggplot() + geom_line(aes(x = date, y = value/gdp)) +
  xlab("") + ylab("Dividendes reçus, Ménages (% du PIB)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 0.1),
                labels = percent_format(acc = 0.1)) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank())

Revenu

% du PIB

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B6", "B7"),
         sheet == "Menages") |>
  arrange(date) |>
  left_join(gdp_quarterly, by = "date") |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Operation1)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank())

Epargne

% du revenu

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B8", "B9NF", "B6", "P51"),
         sheet == "Menages") |>
  select(date, value, operation) |>
  arrange(date) |>
  unique() |>
  spread(operation, value) |>
  transmute(date,
            `Epargne brute des ménages B8/B6` = B8/B6,
            `Besoin (-) ou Capacité (+) de financement B9NF/B6` = B9NF/B6,
            `Formation brute de capital fixe P51/B6` = P51/B6) |>
  gather(variable, value, -date) |>
  ggplot() + geom_line(aes(x = date, y = value, color = variable)) +
  xlab("") + ylab("% du revenu disponible brut (B6)") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank())

% du PIB

Tous

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B8", "B9NF", "P51"),
         sheet == "Menages") |>
  arrange(date) |>
  left_join(gdp_quarterly, by = "date") |>
  mutate(Variable = ifelse(operation %in% c("B8", "B9NF"),
                           Operation1, Operation2)) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Variable)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "5 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank())

2006-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B8", "B9NF", "P51"),
         sheet == "Menages") |>
  arrange(date) |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2006-01-01")) |>
  mutate(Variable = ifelse(operation %in% c("B8", "B9NF"),
                           Operation1, Operation2)) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Variable)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "2 years"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank())

2015-

Code
t_recapAgent_val |>
  left_join(variable, by = c("sheet", "column")) |>
  filter(operation %in% c("B8", "B9NF", "P51"),
         sheet == "Menages") |>
  arrange(date) |>
  left_join(gdp_quarterly, by = "date") |>
  filter(date >= as.Date("2015-01-01")) |>
  mutate(Variable = ifelse(operation %in% c("B8", "B9NF"),
                           Operation1, Operation2)) |>
  ggplot() + geom_line(aes(x = date, y = value/gdp, color = Variable)) +
  xlab("") + ylab("% du PIB") + theme_minimal() +
  scale_x_date(breaks = seq.Date(from = as.Date("1900-01-01"), to = as.Date("2100-10-01"), by = "1 year"),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 2),
                labels = percent_format(acc = 1)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank())