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

Data - INSEE

Info

source dataset Title .html .rData
insee t_recapAgent_val Récapitulatif des séries des comptes d'agents 2025-10-10 2025-09-29
insee CNT-2020-PIB-EQB-RF Équilibre du produit intérieur brut 2025-10-10 2025-10-09

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 2025-01-01 2025-04-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.351 1.387 1.393
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 10.254 15.819 15.780
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.165 0.797 0.729
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.046 0.166 0.153
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 3.136 15.123 13.549
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 3.146 12.843 11.436
RdM 10 NA D41 En provenance du reste du monde Intérêts 13.599 47.667 48.443
RdM 31 NA D41 à destination du reste du monde Intérêts 15.017 58.528 58.688
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 37.030 131.649 131.818
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 25.235 116.650 116.188
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 14.792 32.133 32.580
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 18.211 46.471 46.756

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 2025-04-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.139 1.393
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 7.969 15.780
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.126 0.729
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.028 0.153
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 2.275 13.549
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 2.298 11.436
RdM 10 NA D41 En provenance du reste du monde Intérêts 12.502 48.443
RdM 31 NA D41 à destination du reste du monde Intérêts 11.016 58.688
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 30.572 131.818
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 20.691 116.188
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 16.023 32.580
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 16.663 46.756

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 2025-01-01 2025-04-01
APU 25 Compte d'affectation des revenus primaires D42 Reçu Dividendes 1.860 1.674 1.728
Menages 43 Compte d'affectation des revenus primaires D42 Reçu Dividendes 8.095 17.283 17.351
RdM 11 NA D42 En provenance du reste du monde Dividendes 13.898 33.420 34.251
RdM 32 NA D42 à destination du reste du monde Dividendes 11.212 18.781 19.308
SF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 12.135 21.944 22.078
SF 22 Compte d'affectation des revenus primaires D42 Versé Dividendes 10.181 15.128 15.522
SNF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 37.503 64.976 65.401
SNF 23 Compte d'affectation des revenus primaires D42 Versé Dividendes 46.725 76.109 76.094

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 2025-01-01 2025-04-01
APU 64 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -18.290 -40.089 -39.820
ISBLSM 35 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 0.080 1.333 1.252
Menages 78 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 14.408 44.884 46.413
RdM 50 NA B9NF Besoin (-) ou Capacité(+) de financement de la Nation NA -2.712 0.159 0.403
SF 52 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -1.621 -4.243 -1.852
SNF 46 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 2.711 -1.725 -5.590

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)

# 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

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
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) %>%
  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())