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