GDP and main components (output, expenditure and income)

Data - Eurostat

Info

source dataset .html .RData
eurostat nama_10_gdp 2025-02-01 2025-01-31
eurostat namq_10_gdp 2025-02-01 2025-01-31

Data on macro

Title source dataset .html .RData
Gross value added and income by A*10 industry breakdowns eurostat nama_10_a10 2025-02-01 2024-10-08
Employment by A*10 industry breakdowns eurostat nama_10_a10_e 2025-02-01 2025-02-01
GDP and main components (output, expenditure and income) eurostat nama_10_gdp 2025-02-01 2025-01-31
Labour productivity and unit labour costs eurostat nama_10_lp_ulc 2025-02-01 2024-10-08
Gross value added and income A*10 industry breakdowns eurostat namq_10_a10 2025-02-01 2025-02-01
Employment A*10 industry breakdowns eurostat namq_10_a10_e 2025-02-01 2025-01-31
GDP and main components (output, expenditure and income) eurostat namq_10_gdp 2025-02-01 2025-01-31
Labour productivity and unit labour costs eurostat namq_10_lp_ulc 2025-02-01 2024-11-04
Main GDP aggregates per capita eurostat namq_10_pc 2025-02-01 2024-12-29
Non-financial transactions eurostat nasa_10_nf_tr 2025-02-01 2024-12-14
Non-financial transactions eurostat nasq_10_nf_tr 2025-02-01 2024-10-09
Gross Domestic Product fred gdp 2025-01-26 2025-01-26
Quarterly National Accounts oecd QNA 2024-06-06 2025-01-31
Gross domestic product (GDP) oecd SNA_TABLE1 2025-01-31 2025-01-31
Non-financial accounts by sectors oecd SNA_TABLE14A 2024-09-15 2024-06-30
Disposable income and net lending - net borrowing oecd SNA_TABLE2 2024-07-01 2024-04-11
Value added and its components by activity, ISIC rev4 oecd SNA_TABLE6A 2024-07-01 2024-06-30
External balance on goods and services (% of GDP) wdi NE.RSB.GNFS.ZS 2025-01-24 2025-01-24
GDP (current USD) wdi NY.GDP.MKTP.CD 2024-09-18 2024-09-26
GDP, PPP (current international D) wdi NY.GDP.MKTP.PP.CD 2024-09-18 2024-09-18
GDP per capita (current USD) wdi NY.GDP.PCAP.CD 2025-01-31 2025-01-31
GDP per capita (constant 2015 USD) wdi NY.GDP.PCAP.KD 2024-09-18 2024-09-18
GDP per capita, PPP (current international D) wdi NY.GDP.PCAP.PP.CD 2025-01-31 2025-01-31
GDP per capita, PPP (constant 2011 international D) wdi NY.GDP.PCAP.PP.KD 2025-01-31 2025-01-31

Last

Code
namq_10_gdp %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  head(3) %>%
  print_table_conditional()
time Nobs
2024Q4 3526
2024Q3 61050
2024Q2 62563

na_item

Code
namq_10_gdp %>%
  left_join(na_item, by = "na_item") %>%
  group_by(na_item, Na_item) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

s_adj

Code
namq_10_gdp %>%
  left_join(s_adj, by = "s_adj") %>%
  group_by(s_adj, S_adj) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
s_adj S_adj Nobs
SCA Seasonally and calendar adjusted data 3476595
NSA Unadjusted data (i.e. neither seasonally adjusted nor calendar adjusted data) 3373649
CA Calendar adjusted data, not seasonally adjusted data 470777
SA Seasonally adjusted data, not calendar adjusted data 411345

geo

Code
namq_10_gdp %>%
  left_join(geo, by = "geo") %>%
  group_by(geo, Geo) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

unit

Code
namq_10_gdp %>%
  left_join(unit, by = "unit") %>%
  group_by(unit, Unit) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

time

Code
namq_10_gdp %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Live

Last GDP Numbers

Instantaneous

Code
namq_10_gdp %>%
  filter(time %in% c("2021Q2", "2021Q1", "2019Q4", "2017Q2"),
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, time, values) %>%
  spread(time, values) %>%
  mutate(`2019Q4-2021Q2` = round(100*(`2021Q2`/`2019Q4`-1), 2)) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Average

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2019-10-01")) %>%
  group_by(geo) %>%
  arrange(date) %>%
  mutate(values = 100*values/values[date == as.Date("2019-10-01")],
         values = cumsum(values) / seq_along(values)) %>%
  group_by(geo) %>%
  do(tail(., 1)) %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, date, values) %>%
  arrange(values) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Germany, Italy, France, Spain

Table

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "SCA",
         unit == "CLV10_MEUR",
         geo %in% c("DE", "IT", "ES", "FR")) %>%
  quarter_to_date %>%
  arrange(date) %>%
  filter(date == as.Date("2019-10-01") | date == last(date)) %>%
  group_by(geo) %>%
  mutate(values = 100*values/values[1]) %>%
  left_join(geo, by = "geo") %>%
  select(date, geo, Geo, values) %>%
  print_table_conditional()
date geo Geo values
2019-10-01 DE Germany 100.0000
2019-10-01 ES Spain 100.0000
2019-10-01 FR France 100.0000
2019-10-01 IT Italy 100.0000
2024-10-01 DE Germany 99.8733
2024-10-01 ES Spain 107.5620
2024-10-01 FR France 103.9803
2024-10-01 IT Italy 105.5960

Graph

Code
data <- namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "IT", "ES", "FR")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2019-10-01")) %>%
  group_by(geo) %>%
  arrange(date) %>%
  mutate(values = 100*values/values[1]) %>%
  left_join(geo, by = "geo") %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date))))
data %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") + add_4flags +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(min(data$date), max(data$date), by = 0.25)) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 5))

Germany, France, Europe

2017T2-

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "EA", "FR")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-04-01")) %>%
  group_by(geo) %>%
  mutate(values = 100*values/values[date == as.Date("2017-04-01")]) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) + add_3flags +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("PIB réel (Base 100 = 2019T4)") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2017 Q2"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 2))

2019-

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "EA", "FR")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2019-10-01")) %>%
  group_by(geo) %>%
  mutate(values = 100*values/values[date == as.Date("2019-10-01")]) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) + add_3flags +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("PIB réel (Base 100 = 2019T4)") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2019 Q4"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 2))

2022-

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "EA", "FR")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2021-10-01")) %>%
  group_by(geo) %>%
  mutate(values = 100*values/values[date == as.Date("2021-10-01")]) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) + add_3flags +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("PIB réel (Base 100 = 2019T4)") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2019 Q4"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 1))

Average

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "EA", "FR")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2019-10-01")) %>%
  group_by(geo) %>%
  arrange(date) %>%
  mutate(values = 100*values/values[date == as.Date("2019-10-01")],
         values = cumsum(values) / seq_along(values)) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("PIB réel moyen depuis le début du Covid-19") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2019 Q4"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  add_3flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 2))

Average 2

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         geo %in% c("DE", "EA", "FR", "EL", "BE", "CH", "IT", "ES")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2019-10-01")) %>%
  group_by(geo) %>%
  arrange(date) %>%
  mutate(values = 100*values/values[date == as.Date("2019-10-01")],
         values = cumsum(values) / seq_along(values)) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) + add_8flags + 
  scale_color_identity() + theme_minimal() + xlab("") + ylab("PIB réel moyen depuis le début du Covid-19") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2019 Q4"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(10, 300, 2))

Deflators

Shall we compare deflators to inflation ? (do a stacked graph with both)

GDP

Table, PD_PCH_SM_EUR

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         time %in% c("2022Q1", "2022Q2", "2022Q3","2022Q4",  max(time))) %>%
  select(time, na_item, geo, values) %>%
  left_join(geo, by = "geo") %>%
  spread(time, values) %>%
  arrange(-`2022Q4`) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Table, PD15_EUR

Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD15_EUR",
         time %in% c("2022Q1", "2022Q2", "2022Q3","2022Q4",  max(time))) %>%
  select(time, na_item, geo, values) %>%
  left_join(geo, by = "geo") %>%
  spread(time, values) %>%
  arrange(-`2022Q4`) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Germany, France

GDP

All
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_2flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

1999-
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1999-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1999-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_2flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

2018-
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("2018-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_2flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

Consumption

All
Code
namq_10_gdp %>%
  filter(na_item == "P3",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_2flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Consumption Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

1999-
Code
namq_10_gdp %>%
  filter(na_item == "P3",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1999-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1999-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_2flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Consumption Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

GDP, Consumption

Code
namq_10_gdp %>%
  filter(na_item %in% c("P3", "B1GQ"),
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  left_join(na_item, by = "na_item") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color, linetype = Na_item)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP, Consumption Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color, linetype = Na_item))

Greece, Portugal, France, Germany

2021-
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD15_EUR",
         geo %in% c("FR", "DE", "EL", "PT")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2021-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("2021-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator") + 
  scale_y_log10(breaks = seq(90, 200, 2)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
                   aes(x = date, y = values, label = round(values, 1), color = color))

Germany, France, Euro Area, Italy, Spain

PD_PCH_SM_EUR

1996-
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2010-
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2010-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator, Annual % change") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2018-
GDP
Code
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT", "ES")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_5flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("GDP Deflator, Annual % change") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

P3 Consumption Deflator
Code
namq_10_gdp %>%
  filter(na_item == "P3",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT", "ES")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_5flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Consumption Deflator, Annual % change") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

P31_S14 Final consumption expenditure of households
Code
namq_10_gdp %>%
  filter(na_item == "P31_S14",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT", "ES")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Final consumption expenditure of households, Annual % change") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

P41 Actual Individual Consumption
Code
namq_10_gdp %>%
  filter(na_item == "P41",
         s_adj == "NSA",
         unit == "PD_PCH_SM_EUR",
         geo %in% c("FR", "DE", "EA", "IT", "ES")) %>%
  transmute(time, na_item, geo, values = values/100) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Actual Individual Consumption, Annual % change") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Net Exports of Goods

Table

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "NSA",
         unit == "PC_GDP",
         time %in% c("1989Q4", "1999Q4", "2009Q4", "2019Q4", "2022Q2", "2022Q3")) %>%
  select(time, na_item, geo, values) %>%
  mutate(values = round(values, 1)) %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(NX = round(P61 - P71, 1)) %>%
  select(-P61, -P71) %>%
  spread(time, NX) %>%
  arrange(`2022Q3`) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Germany, France, Netherlands

1995-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "NL")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "NL", color2, color)) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_3flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Eurozone, Italy

All

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1990-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1990-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

English

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Français

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Balance commerciale (% du PIB)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1996-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

France vs. Gemrany

Français

Code
namq_10_gdp %>%
  filter(na_item %in% c("P61", "P71"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA19")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA19", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P61 - P71)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Balance commerciale (% du PIB)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Government Spending

Final consumption expenditure of general government

Code
namq_10_gdp %>%
  filter(na_item %in% c("P3_S13"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "NL", "IT", "ES")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "NL", color2, color)) %>%
  mutate(values = values/100) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_5flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Government Consumption (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 100, 1),
                labels = percent_format(a = 1))

Individual consumption expenditure of general government

Code
namq_10_gdp %>%
  filter(na_item %in% c("P31_S13"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "NL", "IT", "ES")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "NL", color2, color)) %>%
  mutate(values = values/100) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_5flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Government Consumption (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 100, 1),
                labels = percent_format(a = 1))

Collective consumption expenditure of general government

Code
namq_10_gdp %>%
  filter(na_item %in% c("P32_S13"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "NL", "IT", "ES")) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "NL", color2, color)) %>%
  mutate(values = values/100) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_5flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Government Consumption (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 100, 1),
                labels = percent_format(a = 1))

Net Exports

Table

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         time %in% c("1989Q4", "1999Q4", "2009Q4", "2019Q4", "2022Q2", "2022Q3")) %>%
  select(time, na_item, geo, values) %>%
  mutate(values = round(values, 1)) %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(NX = round(P6 - P7, 1)) %>%
  select(-P6, -P7) %>%
  spread(time, NX) %>%
  arrange(`2022Q3`) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Germany, France, Netherlands

1995-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "NL")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "NL", color2, color)) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_3flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Eurozone, Italy

All

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1990-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1990-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

English

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Français

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Balance commerciale (% du PIB)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1996-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Eurozone, Belgium

Table

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         time == "2023Q1") %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)) %>%
  arrange(values) %>%
  print_table_conditional

SCA

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA", "BE")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Eurozone

All

NSA - Unadjusted data (i.e. neither seasonally adjusted nor calendar adjusted data)

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_3flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

SCA

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_3flags +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "EA", color2, color)) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Exportations Nettes (% du PIB)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1996-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "EA", color2, color)) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2000-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2010-

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "EA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  filter(date >= as.Date("2010-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = "none",
        legend.title = element_blank()) +
  xlab("") + ylab("Net Exports (% of GDP)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Albania, Austria, Bosnia

Code
load_data("eurostat/geo.RData")
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("AL", "AT", "BA")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.25),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Belgium, Bulgaria, Switzerland

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("BE", "BG", "CH")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.25),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Cyprus, Czechia, Germany

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("CY", "CZ", "DE")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.25),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Denmark, Greece, Spain

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("DK", "EL", "ES")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.95),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Finland, France, Croatia

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FI", "FR", "HR")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.95),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Hungary, Ireland, Iceland

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("HU", "IE", "IS")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.95),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 100, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Italy, Lithuania, Luxembourg

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("IT", "LT", "LU")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.95),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 100, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Italy

NSA

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

SCA

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) + add_3flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, France, Italy, Spain, Eurozone

SCA

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "SCA",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "IT", "EA", "ES")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  filter(date >= as.Date("1998-01-01")) %>%
  mutate(Geo= ifelse(geo == "EA", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) + add_5flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Poland, France, Italy

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("PL", "DE", "IT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) + add_3flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Poland, Austria, Germany, Tchequia, Hungary, Slovakia

Code
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         geo %in% c("PL", "DE", "SK", "CZ", "HU", "AT")) %>%
  select(time, na_item, geo, values) %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) + add_6flags +
  theme(legend.position = c(0.85, 0.25),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 5),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Decompose GDP

Bn - 2019Q1 - France, Italy, Germany, Spain

Code
namq_10_gdp %>%
  filter(s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         time %in% c("2019Q1"),
         geo %in% c("FR", "IT", "DE", "ES")) %>%
  left_join(na_item, by = "na_item") %>%
  select(na_item, Na_item, geo, values) %>%
  spread(geo, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

% of GDP - 2019Q1 - France, Italy, Germany, Spain

Code
namq_10_gdp %>%
  filter(s_adj == "SCA",
         unit == "PC_GDP",
         time %in% c("2019Q1"),
         geo %in% c("FR", "IT", "DE", "ES")) %>%
  left_join(na_item, by = "na_item") %>%
  select(na_item, Na_item, geo, values) %>%
  mutate(values = values %>% paste0("%")) %>%
  spread(geo, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

% - 2019Q1 - France, Italy, Germany, Spain

Code
namq_10_gdp %>%
  filter(s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR",
         time %in% c("2019Q1"),
         geo %in% c("FR", "IT", "DE", "ES")) %>%
  left_join(na_item, by = "na_item") %>%
  select(na_item, Na_item, geo, values) %>%
  group_by(geo) %>%
  mutate(values = round(100*values/values[na_item == "B1GQ"], 1) %>% paste0("%")) %>%
  spread(geo, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

France - 1979, 1989, 1999, 2009, 2019

Code
namq_10_gdp %>%
  filter(s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR",
         time %in% c("2019Q1", "2009Q1", "1999Q1", "1989Q1", "1979Q1"),
         geo %in% c("FR")) %>%
  left_join(na_item, by = "na_item") %>%
  select(na_item, Na_item, time, values) %>%
  group_by(time) %>%
  mutate(values = round(100*values/values[na_item == "B1GQ"], 1) %>% paste0("%")) %>%
  spread(time, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

REAL Gross Domestic Product

Allemagne, France, Europe, Italy

1990-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1990-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1995-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 180, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

1995-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1995-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 180, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

1996-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1996-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 180, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2000-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("2000-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 130, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2017-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("2017-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(date = zoo::as.yearqtr(paste0(year(date), " Q", quarter(date)))) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  zoo::scale_x_yearqtr(labels = date_format("%Y Q%q"),
                       breaks = seq(zoo::as.yearqtr("2017 Q1"), zoo::as.yearqtr("2100 Q1"), by = 0.25)) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_log10(breaks = seq(80, 130, 2),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2019Q4-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA20", "DE", "IT", "FR", "IE"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         time %in% c("2019Q4", "2023Q4"),
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV15_MEUR") %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, values, time) %>%
  mutate(values = values/1000) %>%
  spread(time, values) %>%
  mutate(Change = `2023Q4` - `2019Q4`) %>%
  print_table_conditional
geo Geo 2019Q4 2023Q4 Change
DE Germany 830.0963 830.3344 0.2381
EA20 Euro area – 20 countries (from 2023) 2886.6134 2993.4117 106.7983
FR France 587.0123 606.3824 19.3701
IE Ireland 89.4322 107.0898 17.6576
IT Italy 431.4978 453.3909 21.8931

Allemagne, France, Italie

All

Code
namq_10_gdp %>%
  filter(geo %in% c("FR", "DE", "IT"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/1000) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 1000, 100),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

1995-

Code
namq_10_gdp %>%
  filter(geo %in% c("FR", "DE", "IT"),
         # B1GQ: Gross domestic product at market prices
         na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(geo, by = "geo") %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/1000) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 1000, 100),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

2019Q4 to 2020Q1

Code
load_data("eurostat/geo.RData")
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         time %in% c("2020Q1", "2019Q4")) %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, time, values) %>%
  spread(time, values) %>%
  transmute(geo, Geo, 
            `growth (%)` = round(100*(`2020Q1`/`2019Q4` - 1), 1)) %>%
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

2019Q4 to 2020Q1 to 2021Q4

Code
load_data("eurostat/geo.RData")
namq_10_gdp %>%
  filter(na_item == "B1GQ",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR",
         time %in% c("2020Q1", "2019Q4", "2021Q4"),
         !(geo %in% c("EA", "EA19"))) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA", "Eurozone", Geo),
         Geo = ifelse(geo == "EU27_2020", "Europe", Geo)) %>%
  select(geo, Geo, time, values) %>%
  spread(time, values) %>%
  transmute(geo, Geo, 
            `2020-Q1 (%)` = round(100*(`2020Q1`/`2019Q4` - 1), 1), 
            `2021Q4 (%)` = round(100*(`2021Q4`/`2019Q4` - 1), 1)) %>%
  filter(!is.na(`2021Q4 (%)`)) %>%
  arrange(`2021Q4 (%)`) %>%
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F, options = list(pageLength = 40)) else .}

Maps: 2008 Current Accounts in Europe (% of GDP)

Code
load_data("eurostat/geo.RData")
namq_10_gdp %>%
  filter(na_item %in% c("P6", "P7"),
         s_adj == "NSA",
         unit == "PC_GDP",
         time == "2019Q4") %>%
  select(na_item, geo, values) %>%
  spread(na_item, values) %>%
  mutate(values = (P6 - P7)/100) %>%
  left_join(geo, by = "geo") %>%
  rename(region = Geo) %>%
  right_join(eurozone %>%
              mutate(region = case_when(region == "UK" ~ "United Kingdom",
                                        region == "Slovakia" ~ "Slovak Republic",
                                        TRUE ~ region)), 
            by = "region") %>%
  ggplot(., aes(x = long, y = lat, group = group, fill = values)) +
  geom_polygon() + coord_map() +
  scale_fill_viridis_c(na.value = "white",
                       labels = scales::percent_format(accuracy = 1, suffix = "% of GDP"),
                       breaks = c(-0.16,-0.12,-0.08,-0.04, 0, 0.04, 0.08, 0.12, 0.16),
                       values = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1)) +
  theme_void() +
  theme(legend.position = c(0.05, 0.55)) + 
  labs(fill = "2019Q4 Current Account")

Consumption

Germany, France, Europe, Italy

All

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR") %>%
  quarter_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1996-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 20),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

1996-

Value

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1996-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 20),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

Volume

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CLV10_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("1996-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 2), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2000-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("2000-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 20),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2015-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2015-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("2015-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 400, 2),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

2017-

Code
namq_10_gdp %>%
  filter(geo %in% c("EA19", "DE", "IT", "FR"),
         # B1GQ: Gross domestic product at market prices
         na_item == "P3",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MEUR") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  group_by(geo) %>%
  mutate(values = 100*values / values[date == as.Date("2017-01-01")]) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2026, 1), "-01-01")),
               labels = date_format("%Y")) +
  add_4flags +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(80, 400, 5),
                labels = dollar_format(suffix = "", prefix = "", accuracy = 1))

Import Price index

Table

Code
namq_10_gdp %>%
  filter(na_item == "P7",
         unit == "PD15_EUR",
         time %in% c("2022Q1", "2021Q4")) %>%
  spread(time, values) %>%
  select_if(~ n_distinct(.) > 1) %>%
  mutate(`growth` = 100*( `2022Q1`/`2021Q4`-1 )) %>%
  arrange(-`growth`) %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, everything()) %>%
  print_table_conditional

Last observation, Eurozone

Code
namq_10_gdp %>%
  filter(time == max(time),
         na_item == "B1GQ") %>%
  spread(unit, values) %>%
  select_if(~ n_distinct(.) > 1) %>%
  left_join(geo, by = "geo") %>%
  select(geo, Geo, everything()) %>%
  print_table_conditional
geo Geo s_adj CLV_I05 CLV_I10 CLV_I15 CLV_I20 CLV_PCH_ANN CLV_PCH_PRE CLV_PCH_SM CLV05_MEUR CLV05_MNAC CLV10_MEUR CLV10_MNAC CLV15_MEUR CLV15_MNAC CLV20_MEUR CLV20_MNAC CON_PPCH_PRE CON_PPCH_SM CP_MEUR CP_MNAC PC_GDP PD_PCH_PRE_EUR PD_PCH_PRE_NAC PD_PCH_SM_EUR PD_PCH_SM_NAC PD05_EUR PD05_NAC PD10_EUR PD10_NAC PD15_EUR PD15_NAC PD20_EUR PD20_NAC PYP_MEUR PYP_MNAC
FR France CA 126.458 120.697 114.144 115.617 NA NA 0.9 556577.1 556577.1 601676.0 601676.0 628553.2 628553.2 669749.6 669749.6 NA 0.88 758735.1 758735.1 100 NA NA NA NA NA NA NA NA NA NA NA NA 736879.0 736879.0
LT Lithuania CA 176.275 168.796 136.912 116.019 NA NA 3.7 9246.6 9246.6 11670.2 11670.2 12816.1 12816.1 14575.6 14575.6 NA 3.68 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
SE Sweden CA 147.820 136.369 122.542 114.965 NA NA 1.1 116308.0 1079594.1 126710.4 1208475.0 138602.7 1296420.0 137517.8 1441846.8 NA 1.12 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
DE Germany NSA 124.736 117.593 108.185 105.143 NA NA -0.4 725249.6 725249.6 769076.6 769076.6 834555.9 834555.9 906732.6 906732.6 NA NA 1101420.0 1101420.0 100 NA NA 2.5 2.5 151.868 151.868 143.213 143.213 131.977 131.977 121.471 121.471 1049664.0 1049664.0
EE Estonia NSA 143.956 146.931 123.011 108.130 NA NA -0.1 4083.1 4083.1 5415.1 5415.1 6461.4 6461.4 7531.1 7531.1 NA -0.08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
ES Spain NSA 128.430 122.836 122.219 124.126 NA NA 3.3 297997.1 297997.1 330779.3 330779.3 332164.8 332164.8 350413.0 350413.0 NA 3.27 420897.0 420897.0 100 NA NA 2.9 2.9 141.242 141.242 127.244 127.244 126.713 126.713 120.115 120.115 399767.0 399767.0
FR France NSA 126.174 120.415 114.057 115.403 NA NA 0.9 555811.1 555811.1 600893.4 600893.4 627712.2 627712.2 668842.9 668842.9 NA 0.95 757694.4 757694.4 100 NA NA 1.3 1.3 136.322 136.322 126.095 126.095 120.707 120.707 113.284 113.284 735881.5 735881.5
IE Ireland NSA 241.433 236.907 168.058 124.630 NA NA 6.3 102794.3 102794.3 99172.8 99172.8 114508.1 114508.1 119086.6 119086.6 NA 6.27 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
LT Lithuania NSA 176.692 168.797 136.981 116.075 NA NA 3.8 9270.1 9270.1 11673.7 11673.7 12821.7 12821.7 14586.1 14586.1 NA 3.77 20245.9 20245.9 100 NA NA 1.2 1.2 218.399 218.399 173.431 173.431 157.903 157.903 138.803 138.803 19564.3 19564.3
SE Sweden NSA 146.764 135.400 122.006 114.319 NA NA 0.6 115705.4 1074000.8 126052.1 1202197.1 137996.5 1290750.0 136862.9 1434979.6 NA 0.60 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
FR France SA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 735357.6 735357.6 100 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
AT Austria SCA 124.641 116.832 110.578 108.509 -0.1 0.0 -0.2 78621.7 78621.7 85786.2 85786.2 94503.5 94503.5 102931.8 102931.8 -0.02 -0.20 122035.7 122035.7 100 1.3 1.3 3.0 3.0 155.219 155.219 142.256 142.256 129.133 129.133 118.560 118.560 NA NA
BE Belgium SCA NA NA NA NA NA 0.2 1.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
CZ Czechia SCA 144.891 128.399 118.370 108.801 1.9 0.5 1.6 39959.2 1190063.7 51153.1 1293354.7 50485.1 1377183.7 59942.0 1585766.0 0.48 1.61 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
DE Germany SCA 124.087 117.061 107.567 104.662 -0.8 -0.2 -0.2 720478.4 720478.4 764001.2 764001.2 829044.6 829044.6 900760.5 900760.5 NA NA 1087972.0 1087972.0 100 1.1 1.1 2.4 2.4 151.007 151.007 142.404 142.404 131.232 131.232 120.784 120.784 NA NA
EA Euro area (EA11-1999, EA12-2001, EA13-2007, EA15-2008, EA16-2009, EA17-2011, EA18-2014, EA19-2015, EA20-2023) SCA 123.095 118.197 113.383 111.728 0.1 0.0 0.9 2620997.3 2620997.3 2847692.5 2847692.5 3021187.5 3021187.5 3241711.6 3241711.6 0.03 0.93 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
EA12 Euro area - 12 countries (2001-2006) SCA 122.310 117.586 112.949 111.599 0.1 0.0 0.9 2552087.6 2552087.6 2763275.8 2763275.8 2932065.3 2932065.3 3144260.2 3144260.2 0.02 0.90 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
EA19 Euro area - 19 countries (2015-2022) SCA 123.025 118.124 113.287 111.645 0.1 0.0 0.9 2608176.9 2608176.9 2832356.9 2832356.9 3005757.1 3005757.1 3225158.3 3225158.3 0.03 0.92 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
EA20 Euro area – 20 countries (from 2023) SCA 123.095 118.197 113.383 111.728 0.1 0.0 0.9 2620997.3 2620997.3 2847692.5 2847692.5 3021187.5 3021187.5 3241711.6 3241711.6 0.03 0.93 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
EE Estonia SCA 137.595 139.768 117.123 103.027 0.2 0.1 -0.1 3899.4 3899.4 5150.1 5150.1 6149.9 6149.9 7182.3 7182.3 0.06 -0.08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
ES Spain SCA 125.707 120.231 119.627 121.494 3.1 0.8 3.5 291677.7 291677.7 323764.9 323764.9 325121.0 325121.0 342982.0 342982.0 0.75 3.49 407457.0 407457.0 100 1.1 1.1 2.3 2.3 139.694 139.694 125.850 125.850 125.325 125.325 118.798 118.798 391289.0 391289.0
EU27_2020 European Union - 27 countries (from 2020) SCA 127.114 121.082 115.114 111.933 0.5 0.1 1.1 3049697.2 3049697.2 3341343.8 3341343.8 3541091.1 3541091.1 3797491.6 3797491.6 0.13 1.05 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
FR France SCA 122.801 117.207 110.843 112.274 -0.3 -0.1 0.7 540482.3 540482.3 584277.1 584277.1 610377.0 610377.0 650382.1 650382.1 -0.08 0.66 736398.3 736398.3 100 0.4 0.4 1.6 1.6 136.248 136.248 126.036 126.036 120.646 120.646 113.225 113.225 715570.3 715570.3
HU Hungary SCA 139.032 140.068 126.160 111.443 2.1 0.5 0.2 31629.7 7845751.6 34863.8 9604287.4 35594.2 11034190.0 38713.9 13598253.0 0.53 0.19 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
IE Ireland SCA 224.532 223.945 161.317 118.684 -5.0 -1.3 2.5 95565.3 95565.3 93632.1 93632.1 109817.2 109817.2 113617.2 113617.2 -1.27 2.55 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
IT Italy SCA 103.917 105.935 109.596 115.520 -0.1 0.0 0.5 390014.3 390014.3 428258.7 428258.7 455644.4 455644.4 481963.9 481963.9 -0.01 0.50 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
LT Lithuania SCA 172.897 165.562 134.289 113.796 3.5 0.9 3.6 9069.4 9069.4 11446.6 11446.6 12570.5 12570.5 14296.3 14296.3 0.87 3.55 19761.6 19761.6 100 -0.9 -0.9 2.2 2.2 217.892 217.892 172.642 172.642 157.207 157.207 138.229 138.229 NA NA
PT Portugal SCA NA NA NA NA NA 1.5 2.7 NA NA NA NA NA NA NA NA 1.48 2.70 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
SE Sweden SCA 139.401 128.599 115.595 108.385 0.8 0.2 1.2 109664.2 1017924.6 119431.4 1139053.3 130690.1 1222410.2 129721.8 1360107.0 0.20 1.20 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA