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 2026-01-15 2026-01-10
insee CNT-2020-PIB-EQB-RF Équilibre du produit intérieur brut 2026-01-15 2026-01-15

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-04-01 2025-07-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.351 1.393 1.431
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 10.254 16.352 16.388
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.165 0.729 0.684
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.046 0.153 0.156
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 3.136 13.559 13.335
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 3.146 11.432 11.188
RdM 10 NA D41 En provenance du reste du monde Intérêts 13.599 48.443 49.440
RdM 31 NA D41 à destination du reste du monde Intérêts 15.017 58.688 59.372
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 37.030 132.390 135.050
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 25.235 116.198 118.211
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 14.792 32.580 33.463
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 18.211 46.761 47.953

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-07-01
APU 24 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.139 1.431
APU 28 Compte d'affectation des revenus primaires D41 Versé Intérêts 7.961 16.388
ISBLSM 16 Compte d'affectation des revenus primaires D41 Reçu Intérêts 0.126 0.684
ISBLSM 18 Compte d'affectation des revenus primaires D41 Versé Intérêts 0.028 0.156
Menages 42 Compte d'affectation des revenus primaires D41 Reçu Intérêts 2.275 13.335
Menages 46 Compte d'affectation des revenus primaires D41 Versé Intérêts 2.297 11.188
RdM 10 NA D41 En provenance du reste du monde Intérêts 12.502 49.440
RdM 31 NA D41 à destination du reste du monde Intérêts 11.016 59.372
SF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 30.564 135.050
SF 21 Compte d'affectation des revenus primaires D41 Versé Intérêts 20.691 118.211
SNF 17 Compte d'affectation des revenus primaires D41 Reçu Intérêts 16.023 33.463
SNF 22 Compte d'affectation des revenus primaires D41 Versé Intérêts 16.663 47.953

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-04-01 2025-07-01
APU 25 Compte d'affectation des revenus primaires D42 Reçu Dividendes 1.860 1.742 1.772
Menages 43 Compte d'affectation des revenus primaires D42 Reçu Dividendes 8.095 16.344 16.258
RdM 11 NA D42 En provenance du reste du monde Dividendes 13.898 31.253 31.300
RdM 32 NA D42 à destination du reste du monde Dividendes 11.212 17.364 17.338
SF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 12.135 22.078 22.246
SF 22 Compte d'affectation des revenus primaires D42 Versé Dividendes 10.181 14.429 14.452
SNF 18 Compte d'affectation des revenus primaires D42 Reçu Dividendes 37.503 62.624 62.226
SNF 23 Compte d'affectation des revenus primaires D42 Versé Dividendes 46.725 74.470 74.087

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-04-01 2025-07-01
APU 64 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -18.291 -40.420 -40.316
ISBLSM 35 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 0.080 1.052 0.913
Menages 78 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 14.387 45.155 43.623
RdM 50 NA B9NF Besoin (-) ou Capacité(+) de financement de la Nation NA -2.699 -1.400 4.674
SF 52 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA -1.617 -2.300 -0.296
SNF 46 Compte de capital B9NF Besoin (-) ou Capacité (+) de financement NA 2.741 -4.887 0.750

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