Interest rates - monthly data

Data - Eurostat

Info

Last observation: Monthly: 2026M06 (N = 42)

First observation: Monthly: 1980M01 (N = 9)

Last data update: 23 jul 2026, 23:17. Last compile: 24 jul 2026, 01:29

Structure

Interest Rates

Table

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         time %in% c("2000M01", "2005M01", "2010M01", "2020M01", "2021M04")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  
  spread(time, values) %>%
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Germany, Italy, France, Spain

All

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  mutate(values = values / 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")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  mutate(values = values / 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")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1998-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("1998-01-01")) %>%
  mutate(values = values / 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, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2010-2015

Interest rates

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2010-01-01"),
         date <= as.Date("2016-01-01")) %>%
  mutate(values = values / 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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2005-

Interest rates

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2005-01-01")) %>%
  mutate(values = values / 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, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Spreads

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2005-01-01")) %>%
  mutate(values = values / 100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(date) %>%
  mutate(values = values - values[geo == "DE"]) %>%
  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, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond spreads vs. Germany\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, .5),
                labels = percent_format(a = .1))

2000-2007

Interest rates

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2000-01-01"),
         date <= as.Date("2008-01-01")) %>%
  mutate(values = values / 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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, .2),
                labels = percent_format(a = .1))

Spreads

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2000-01-01"),
         date <= as.Date("2008-01-01")) %>%
  mutate(values = values / 100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(date) %>%
  mutate(values = values - values[geo == "DE"]) %>%
  #filter(geo != "DE") %>%
  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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond spreads vs. Germany\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, .1),
                labels = percent_format(a = .1))

2014-

Interest rates

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Spreads

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(date) %>%
  mutate(values = values - values[geo == "DE"]) %>%
  #filter(geo != "DE") %>%
  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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond spreads vs. Germany\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, .5),
                labels = percent_format(a = .1))

Germany, Italy, France, Spain, Greece

All

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  mutate(values = values / 100) %>%
  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, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1998-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("1998-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2005-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2005-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2014-

Interest rates

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Spreads

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(date) %>%
  mutate(values = values - values[geo == "DE"]) %>%
  #filter(geo != "DE") %>%
  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, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond spreads vs. Germany\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, .5),
                labels = percent_format(a = .1))

2018-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Germany, Italy, France, Spain, Greece, Portugal

2018-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("FR", "DE", "IT", "ES", "EL", "PT")) %>%
  
  month_to_date %>%
  filter(date >= as.Date("2018-01-01")) %>%
  mutate(values = values / 100) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + add_6flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Portugal, Greece, Germany, Euro area

All

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA", "DE", "EL", "PT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  mutate(values = values / 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")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

1995-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA", "DE", "EL", "PT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  mutate(values = values / 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")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2005-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA", "DE", "EL", "PT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  filter(date >= as.Date("2005-01-01")) %>%
  mutate(values = values / 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, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2014-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA", "DE", "EL", "PT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 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, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

Portugal, Spain, Italy

1998-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA","FR", "PT", "ES", "IT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  filter(date >= as.Date("1998-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")

2014-

Code
ei_mfir_m %>%
  filter(indic %in% c("MF-LTGBY-RT"),
         geo %in% c("EA","FR", "PT", "ES", "IT")) %>%
  
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  month_to_date %>%
  filter(date >= as.Date("2014-01-01")) %>%
  mutate(values = values / 100) %>%
  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, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Long term government bond yields\nMaastricht definition (average)") +
  scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
                labels = percent_format(a = 1)) + 
  geom_hline(yintercept = 0, linetype = "dashed",  color = "black")