Unit labour costs and labour productivity (employment based), Total economy - ULC_EEQ

Data - OECD


Last observation: Q4 2023 (N = 27) · 2023 (N = 4)

First observation: 1949 (N = 1) · Q1 1949 (N = 3)

Last data update: 02 août 2026, 09:17

Last compile: 03 sept. 2026, 00:23

Structure

Number of observations

Code
ULC_EEQ |>
  left_join(ULC_EEQ_var$SUBJECT, by = c("SUBJECT")) |>
  group_by(SUBJECT, Subject, MEASURE, FREQUENCY) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Data Structure

Code
ULC_EEQ_var$VAR_DESC %>%
  {if (is_html_output()) print_table(.) else .}
id description
LOCATION Country
SUBJECT Subject
MEASURE Measure
FREQUENCY Frequency
TIME Time
OBS_VALUE Observation Value
TIME_FORMAT Time Format
OBS_STATUS Observation Status
UNIT Unit
POWERCODE Unit multiplier
REFERENCEPERIOD Reference period

Unit Labour Cost

France / Germany

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("FRA", "DEU"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  
  theme_minimal() +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 10)) +
  ylab("Unit Labour Cost") + xlab("")

France / Germany from 1990

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("FRA", "DEU"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("GDP per person employed") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

France / Germany / United States

Unit Labour Costs - ULQEUL01

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("FRA", "DEU", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("GDP per person employed") + xlab("") + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

GDP per person employed - ULQELP01

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("FRA", "DEU", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("GDP per person employed") + xlab("") + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

Labour Compensation per employed person - ULQECU01

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQECU01",
         LOCATION %in% c("FRA", "DEU", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("Labour Compensation per employed person") + xlab("") + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 300, 10))

Euro area / United States

Unit Labour Costs - ULQEUL01

All

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5))

1995-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1995) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1995-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1921, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5))

1996-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1996) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5))

2017-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2017) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2017-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

2020-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQEUL01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2020) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2020-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

GDP per person employed - ULQELP01

All

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  
  theme_minimal() + ylab("GDP per person employed") + xlab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

2017-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2017) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2017-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

2020-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2020) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2020-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("Unit Labour Cost") + xlab("") + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

Labour Compensation per employed person - ULQECU01

All

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQECU01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 1990) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1996-01-01")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  
  theme_minimal() + ylab("Labour Compensation per employed person") + xlab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 300, 10))

2017-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQECU01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2017) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2017-01-01")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  
  theme_minimal() + ylab("Labour Compensation per employed person") + xlab("") +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 300, 10))

2019-Q4

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQECU01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  mutate(Location = ifelse(LOCATION == "EA19", "Euro area", "US"),
         date = zoo::as.yearqtr(obsTime, format = "%Y-Q%q")) |>
  filter(date >= zoo::as.yearqtr("2019 Q4")) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == zoo::as.yearqtr("2019 Q4")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  theme_minimal() + ylab("100 = 2019-Q4") + xlab("") +
  zoo::scale_x_yearqtr(format = "%Y-Q%q",
                       n = 15) +
  scale_color_manual(values = c("#003399", "#B22234")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(breaks = seq(0, 300, 2))

2020-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQECU01",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2020) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2020-01-01")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  
  theme_minimal() + ylab("Labour Compensation per employed person") + xlab("") +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 300, 2))

Euro area vs. US

2017-Q2

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$SUBJECT, by = "SUBJECT") |>
  mutate(Subject = ifelse(SUBJECT == "ULQECU01", "Labour Compensation\nper person employed", Subject)) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Euro area", "US"),
         date = zoo::as.yearqtr(obsTime, format = "%Y-Q%q")) |>
  filter(date >= zoo::as.yearqtr("2017 Q2")) |>
  mutate(Subject = factor(Subject, levels = c("Unit Labour Costs ",
                                              "Labour Compensation\nper person employed",
                                              "GDP per person employed"))) |>
  group_by(Location, Subject) |>
  mutate(obsValue = 100*obsValue/obsValue[date == zoo::as.yearqtr("2017 Q2")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  theme_minimal() + ylab("100 = 2019-Q4") + xlab("") +
  zoo::scale_x_yearqtr(format = "%Y-Q%q",
                       breaks = zoo::as.yearqtr(c("2017 Q2", "2017 Q4", "2018 Q2", "2018 Q4",
                                                  "2019 Q2", "2019 Q4", "2020 Q2", "2020 Q4",
                                                  "2021 Q2", "2021 Q4", "2022 Q2", "2022 Q4",
                                                  "2023 Q2"))) +
  scale_color_manual(values = c("#003399", "#B22234")) +
  theme(legend.position = "top",
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(breaks = seq(0, 300, 2)) +
  facet_wrap(~ Subject)

2019-Q4

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         LOCATION %in% c("EA19", "USA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$SUBJECT, by = "SUBJECT") |>
  mutate(Subject = ifelse(SUBJECT == "ULQECU01", "Labour Compensation\nper person employed", Subject)) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Euro area", "US"),
         date = zoo::as.yearqtr(obsTime, format = "%Y-Q%q")) |>
  filter(date >= zoo::as.yearqtr("2019 Q4")) |>
  mutate(Subject = factor(Subject, levels = c("Unit Labour Costs ",
                                              "Labour Compensation\nper person employed",
                                              "GDP per person employed"))) |>
  group_by(Location, Subject) |>
  mutate(obsValue = 100*obsValue/obsValue[date == zoo::as.yearqtr("2019 Q4")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  theme_minimal() + ylab("100 = 2019-Q4") + xlab("") +
  zoo::scale_x_yearqtr(format = "%Y-Q%q",
                       breaks = zoo::as.yearqtr(c("2019 Q4", "2020 Q2", "2020 Q4",
                                                  "2021 Q2", "2021 Q4", "2022 Q2",
                                                  "2022 Q4", "2023 Q2"))) +
  scale_color_manual(values = c("#003399", "#B22234")) +
  theme(legend.position = "top",
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(breaks = seq(0, 300, 2)) +
  facet_wrap(~ Subject)

France, US, Eurozone

2019-Q4

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         LOCATION %in% c("EA19", "USA", "FRA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$SUBJECT, by = "SUBJECT") |>
  mutate(Subject = ifelse(SUBJECT == "ULQECU01", "Labour Compensation\nper person employed", Subject)) |>
  mutate(Location = case_when(LOCATION == "EA19" ~ "Euro area",
                              LOCATION == "USA" ~ "United States",
                              LOCATION == "FRA" ~ "France",
                              T ~ "NA"),
         date = zoo::as.yearqtr(obsTime, format = "%Y-Q%q")) |>
  filter(date >= zoo::as.yearqtr("2019 Q4")) |>
  mutate(Subject = factor(Subject, levels = c("Unit Labour Costs ",
                                              "Labour Compensation\nper person employed",
                                              "GDP per person employed"))) |>
  group_by(Location, Subject) |>
  mutate(obsValue = 100*obsValue/obsValue[date == zoo::as.yearqtr("2019 Q4")]) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Location)) +
  theme_minimal() + ylab("100 = 2019-Q4") + xlab("") + add_9flags +
  zoo::scale_x_yearqtr(format = "%Y-Q%q",
                       breaks = zoo::as.yearqtr(c("2019 Q4", "2020 Q2", "2020 Q4",
                                                  "2021 Q2", "2021 Q4", "2022 Q2",
                                                  "2022 Q4", "2023 Q2"))) +
  scale_color_manual(values = c("#FFCC00", "#002395", "#B22234")) +
  theme(legend.position = "top",
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(breaks = seq(0, 300, 2)) +
  facet_wrap(~ Subject)

2000-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("EA19", "USA", "FRA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2008) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2008-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("GDP Per person employed") + xlab("") + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))

2017-

Code
ULC_EEQ |>
  filter(MEASURE == "IXOBSA",
         SUBJECT == "ULQELP01",
         LOCATION %in% c("EA19", "USA", "FRA"),
         FREQUENCY == "Q") |>
  left_join(ULC_EEQ_var$LOCATION, by = "LOCATION") |>
  quarter_to_date() |>
  filter(year(date) >= 2017) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("2017-01-01")]) |>
  mutate(Location = ifelse(LOCATION == "EA19", "Europe", Location)) |>
  add_flag_color("Location") |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
  
  theme_minimal() + ylab("GDP Per person employed") + xlab("") + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_color_identity() +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 5))