Financial market data

Data - ECB

Info

source dataset .html .RData

ecb

FM

2024-10-30 2024-10-30

Data on monetary policy

source dataset .html .RData

bdf

FM

2024-07-26 2024-10-16

bdf

MIR

2024-07-26 2024-07-01

bdf

MIR1

2024-10-16 2024-10-16

bis

CBPOL

2024-08-09 2024-09-15

ecb

BSI

2024-10-08 2024-09-16

ecb

BSI_PUB

2024-10-08 2024-10-23

ecb

FM

2024-10-30 2024-10-30

ecb

ILM

2024-10-08 2024-10-08

ecb

ILM_PUB

2024-10-08 2024-09-10

ecb

liq_daily

2024-10-08 2024-09-11

ecb

MIR

2024-06-19 2024-10-08

ecb

RAI

2024-10-08 2024-10-08

ecb

SUP

2024-10-08 2024-10-08

ecb

YC

2024-10-08 2024-09-16

ecb

YC_PUB

2024-10-08 2024-10-08

eurostat

ei_mfir_m

2024-10-23 2024-10-08

eurostat

irt_st_m

2024-10-24 2024-10-08

fred

r

2024-10-24 2024-10-24

oecd

MEI

2024-04-16 2024-06-30

oecd

MEI_FIN

2024-09-15 2024-05-21

Data on interest rates

source dataset .html .RData

bdf

FM

2024-07-26 2024-10-16

bdf

MIR

2024-07-26 2024-07-01

bdf

MIR1

2024-10-16 2024-10-16

bis

CBPOL_D

2024-09-13 2024-05-10

bis

CBPOL_M

2024-08-09 2024-04-19

ecb

FM

2024-10-30 2024-10-30

ecb

MIR

2024-06-19 2024-10-08

eurostat

ei_mfir_m

2024-10-23 2024-10-08

eurostat

irt_lt_mcby_d

2024-10-24 2024-08-28

eurostat

irt_st_m

2024-10-24 2024-10-08

fred

r

2024-10-24 2024-10-24

oecd

MEI

2024-04-16 2024-06-30

oecd

MEI_FIN

2024-09-15 2024-05-21

wdi

FR.INR.RINR

2024-08-28 2024-09-18

LAST_COMPILE

LAST_COMPILE
2024-10-30

Last

TIME_PERIOD FREQ Nobs
2024-Q3 Q 24
2024-10-30 D 6
2024-10-23 B 6
2024-09 M 39
2023 A 26

Last Day

TITLE TIME_PERIOD OBS_VALUE
Deposit facility - date of changes (raw data) - Change in percentage points compared to previous rate 2024-10-30 -0.25
Deposit facility - date of changes (raw data) - Level 2024-10-30 3.25
Marginal lending facility - date of changes (raw data) - Change in percentage points compared to previous rate 2024-10-30 -0.25
Marginal lending facility - date of changes (raw data) - Level 2024-10-30 3.65
Main refinancing operations - fixed rate tenders (fixed rate) (date of changes) - Level 2024-10-30 3.40
Main refinancing operations - Minimum bid rate/fixed rate (date of changes) - Level 2024-10-30 3.40

PROVIDER_FM_ID

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

FREQ

Code
FM %>%
  left_join(FREQ,  by = "FREQ") %>%
  group_by(FREQ, Freq) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) print_table(.) else .}
FREQ Freq Nobs
A Annual 840
B Daily - businessweek 356
D Daily 56606
M Monthly 20470
Q Quarterly 3462

REF_AREA

Code
FM %>%
  left_join(REF_AREA,  by = "REF_AREA") %>%
  group_by(REF_AREA, Ref_area) %>%
  summarise(Nobs = n()) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Ref_area))),
         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 .}

CURRENCY

Code
FM %>%
  left_join(CURRENCY,  by = "CURRENCY") %>%
  group_by(CURRENCY, Currency) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
CURRENCY Currency Nobs
EUR Euro 71102
USD US dollar 5478
JPY Japanese yen 3519
GBP UK pound sterling 800
DKK Danish krone 433
SEK Swedish krona 402

PROVIDER_FM

Code
FM %>%
  left_join(PROVIDER_FM,  by = "PROVIDER_FM") %>%
  group_by(PROVIDER_FM, Provider_fm) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
PROVIDER_FM Provider_fm Nobs
4F ECB 67058
DS DataStream 9432
RT Reuters 5244

INSTRUMENT_FM

Code
FM %>%
  left_join(INSTRUMENT_FM,  by = "INSTRUMENT_FM") %>%
  group_by(INSTRUMENT_FM, Instrument_fm) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
INSTRUMENT_FM Instrument_fm Nobs
KR Key interest rate 57132
EI Equity/index 8597
BB Benchmark bond 7778
MM Money Market 6035
BZ Zero-coupon yield bond 820
SP Spread 787
CY Commodity 585

DATA_TYPE_FM

Code
FM %>%
  left_join(DATA_TYPE_FM,  by = "DATA_TYPE_FM") %>%
  group_by(DATA_TYPE_FM, Data_type_fm) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
DATA_TYPE_FM Data_type_fm Nobs
LEV Level 37926
CHG Change in percentage points compared to previous rate 19036
HSTA Historical close, average of observations through period 14552
YLDA Yield, average of observations through period 4493
YLD Yield 3285
ASKA Ask price or primary activity, average of observations through period 835
YLDE Yield, end of period 820
SPRE Spread, end of period 787

COLLECTION

Code
FM %>%
  left_join(COLLECTION,  by = "COLLECTION") %>%
  group_by(COLLECTION, Collection) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) print_table(.) else .}
COLLECTION Collection Nobs
A Average of observations through period 19901
E End of period 61833

UNIT

Code
FM %>%
  left_join(UNIT,  by = "UNIT") %>%
  group_by(UNIT, Unit) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) print_table(.) else .}
UNIT Unit Nobs
EUR Euro 157
PC Percent 19036
PCPA Percent per annum 53944
POINTS Points 8597

TITLE

Code
FM %>%
  group_by(TITLE) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Real Rates

USA, Euro Area

1999

Code
plot <- FM %>%
  filter(PROVIDER_FM_ID %in% c("R_US10YT_RR", "R_U2_10Y")) %>%
  month_to_date %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Zone euro", "États-Unis")) %>%
  filter(date >= as.Date("1999-01-01")) %>%
  mutate(OBS_VALUE = OBS_VALUE/100) %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Taux d'intérêt réels à 10 ans") +
  geom_line(aes(x = date, y = OBS_VALUE, color = Ref_area)) + 
  scale_color_manual(values = c("#B22234", "#003399")) +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1999-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin =-Inf, ymax = +Inf), 
            fill = '#B22234', alpha = 0.1)  +
  geom_rect(data = cepr_recessions %>%
              filter(Peak > as.Date("1999-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = '#003399', alpha = 0.1)  +
  scale_x_date(breaks = c(seq(1999, 2100, 5), seq(1997, 2100, 5)) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.26, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  labs(caption = "Source: BCE, Données sur les marchés financiers")
save(plot, file = "FM_files/figure-html/real-rates-USA-EUR-1999-1.RData")
plot

USA, Japan, Euro Area

All

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("R_US10YT_RR", "R_JP10YT_RR", "R_U2_10Y")) %>%
  month_to_date %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) %>%
  left_join(colors, by = c("Ref_area" = "country")) %>%
  mutate(color = ifelse(REF_AREA == "U2", color2, color)) %>%
  mutate(OBS_VALUE = OBS_VALUE/100) %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Real rates, 10-year") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1900, 2100, 10) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1))

2010-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("R_US10YT_RR", "R_JP10YT_RR", "R_U2_10Y")) %>%
  month_to_date %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) %>%
  filter(date >= as.Date("2010-01-01")) %>%
  left_join(colors, by = c("Ref_area" = "country")) %>%
  mutate(color = ifelse(REF_AREA == "U2", color2, color)) %>%
  mutate(OBS_VALUE = OBS_VALUE/100) %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Real rates, 10-year") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1))

2015-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("R_US10YT_RR", "R_JP10YT_RR", "R_U2_10Y")) %>%
  month_to_date %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) %>%
  filter(date >= as.Date("2015-01-01")) %>%
  left_join(colors, by = c("Ref_area" = "country")) %>%
  mutate(color = ifelse(REF_AREA == "U2", color2, color)) %>%
  mutate(OBS_VALUE = OBS_VALUE/100) %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Real rates, 10-year") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1))

ECB Key Interest rates

EONIA

All

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT", "EONIA"),
         FREQ == "M") %>%
  month_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  theme(legend.position = c(0.45, 0.92),
        legend.title = element_blank())

Deposit Facility, Marginal Lending Facility

All

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT", "MRR_FR", "MRR_MBR", "MRR"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  theme(legend.position = c(0.45, 0.92),
        legend.title = element_blank())

Deposit Facility, Marginal Lending Facility

All

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  mutate(Provider_fm_id = factor(PROVIDER_FM_ID,
                                 levels = c("MLFR", "MRR_RT", "DFR"),
                                 labels = c("ECB Marginal lending facility",
                                            "ECB Main refinancing operations",
                                            "ECB Deposit facility"))) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = Provider_fm_id)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  theme(legend.position = c(0.65, 0.92),
        legend.title = element_blank()) +
  geom_hline(yintercept = 3.75/100, linetype = "dashed")

2010

Code
dates_ecb <- FM %>%
  filter(PROVIDER_FM_ID == "DFR") %>%
  day_to_date %>%
  mutate(OBS_VALUE = OBS_VALUE-lag(OBS_VALUE)) %>%
  filter(OBS_VALUE != 0) %>%
  pull(date)
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  mutate(Provider_fm_id = factor(PROVIDER_FM_ID,
                                 levels = c("MLFR", "MRR_RT", "DFR"),
                                 labels = c("ECB Marginal lending facility",
                                            "ECB Main refinancing operations - Minimum bid rate/fixed rate",
                                            "ECB Deposit facility"))) %>%
  filter(date >= as.Date("2010-01-01"))%>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = Provider_fm_id)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = dates_ecb,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 0.5),
                     labels = percent_format(accuracy = .1)) +
  theme(legend.position = c(0.45, 0.92),
        legend.title = element_blank())

2016-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  filter(date >= as.Date("2016-01-01"))%>%
  mutate(Provider_fm_id = factor(PROVIDER_FM_ID,
                                 levels = c("MLFR", "MRR_RT", "DFR"),
                                 labels = c("ECB Marginal lending facility",
                                            "ECB Main refinancing operations - Minimum bid rate/fixed rate",
                                            "ECB Deposit facility"))) %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = Provider_fm_id)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2025, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  theme(legend.position = c(0.45, 0.92),
        legend.title = element_blank())

2022-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  #add_row(date = as.Date("2024-09-12"), PROVIDER_FM_ID = "DFR", OBS_VALUE = 3.5) %>%
  #add_row(date = as.Date("2024-09-12"), PROVIDER_FM_ID = "MRR_RT", OBS_VALUE = 3.65) %>%
  #add_row(date = as.Date("2024-09-12"), PROVIDER_FM_ID = "MLFR", OBS_VALUE = 3.9) %>%
  #add_row(date = as.Date("2024-09-17"), PROVIDER_FM_ID = "DFR", OBS_VALUE = 3.5) %>%
  #add_row(date = as.Date("2024-09-17"), PROVIDER_FM_ID = "MRR_RT", OBS_VALUE = 3.65) %>%
  #add_row(date = as.Date("2024-09-17"), PROVIDER_FM_ID = "MLFR", OBS_VALUE = 3.9) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  mutate(Provider_fm_id = factor(PROVIDER_FM_ID,
                                 levels = c("MLFR", "MRR_RT", "DFR"),
                                 labels = c("ECB Marginal lending facility",
                                            "ECB Main refinancing operations - Minimum bid rate/fixed rate",
                                            "ECB Deposit facility"))) %>%
  filter(date >= as.Date("2022-01-01")) %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = Provider_fm_id)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = c(dates_ecb),
               labels = date_format("%d %B %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 0.5),
                     labels = percent_format(accuracy = .1)) +
  theme(legend.position = c(0.65, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2022 - Dates of change

  • Schedules for the meetings of the Governing Council. html

  • Key ECB interest rates: Dates of change. html

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  mutate(Provider_fm_id = factor(PROVIDER_FM_ID,
                                 levels = c("MLFR", "MRR_RT", "DFR"),
                                 labels = c("ECB Marginal lending facility",
                                            "ECB Main refinancing operations",
                                            "ECB Deposit facility"))) %>%
  filter(date >= as.Date("2022-07-01")) %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = Provider_fm_id)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = c(dates_ecb, Sys.Date()),
               labels = date_format("%d %B %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 0.5),
                     labels = percent_format(accuracy = .1)) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Around September 2022

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("DFR", "MLFR", "MRR_RT"),
         DATA_TYPE_FM == "LEV",
         FREQ == "D") %>%
  day_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  filter(date >= as.Date("2022-09-05"),
         date <= as.Date("2022-09-20")) %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "1 day"),
               labels = date_format("%d %b %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 50, 0.25),
                     labels = percent_format(accuracy = .01)) +
  theme(legend.position = c(0.4, 0.92),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Japan

1970-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("JP10YT_RR", "R_JP10YT_RR")) %>%
  month_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 2),
                     labels = percent_format(accuracy = 1)) +
  theme(legend.position = c(0.75, 0.9),
        legend.title = element_blank())

2000-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("JP10YT_RR", "R_JP10YT_RR")) %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.75, 0.9),
        legend.title = element_blank())

United States

1970-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("US10YT_RR", "R_US10YT_RR")) %>%
  month_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1900, 2100, 10) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 2),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.75, 0.9),
        legend.title = element_blank())

2000-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("US10YT_RR", "R_US10YT_RR")) %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.75, 0.9),
        legend.title = element_blank())

Euro area

1970-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("U2_10Y", "R_U2_10Y")) %>%
  month_to_date %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1900, 2100, 10) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 2),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.75, 0.9),
        legend.title = element_blank())

2000-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("U2_10Y", "R_U2_10Y")) %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.35, 0.2),
        legend.title = element_blank())

2015-

Code
FM %>%
  filter(PROVIDER_FM_ID %in% c("U2_10Y", "R_U2_10Y")) %>%
  month_to_date %>%
  filter(date >= as.Date("2015-01-01")) %>%
  left_join(PROVIDER_FM_ID,  by = "PROVIDER_FM_ID") %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = OBS_VALUE / 100, color = PROVIDER_FM_ID_desc)) + 
  theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
  scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-50, 50, 1),
                     labels = percent_format(accuracy = 1)) +
  
  theme(legend.position = c(0.35, 0.2),
        legend.title = element_blank())