Nowhere near as spectacular as the Upshot/New York Times 3d yield curve by Amanda Cox and Gregor Aisch, but not bad at all for a couple of lines of R
code with the plotly
htmlwidget.
library(plotly)
library(dplyr)
library(tidyr)
library(purrr)
library(quantmod)
library(magrittr)
# get yields from St. Louis Fed FRED
yield_curve <- list("DTB3", "DGS2", "DGS5", "DGS10", "DGS30") %>%
map(
~getSymbols(.x, auto.assign=FALSE, src="FRED")
) %>%
do.call(merge,.)
# create our 3d surface yield curve
yield_curve["1980::"] %>%
# convert to numeric matrix
data.matrix() %>%
# transpose
t() %>%
# draw our Plotly 3d surface
plot_ly(
x=as.Date(index(yield_curve["1980::"])),
y=c(0.25,2,5,10,30),
z=.,
type="surface"
) %>%
plotly::layout(
scene=list(
xaxis=list(title="date"),
yaxis=list(title="term"),
zaxis=list(title="yield")
)
)
# 3d scatter chart
yield_curve_tidy <- yield_curve %>%
data.frame() %>%
add_rownames(var="date") %>%
gather(symbol,yield,-date) %>%
mutate(term=c(0.25,2,5,10,30)[match(symbol,colnames(yield_curve))])
yield_curve_tidy[which(!is.na(yield_curve_tidy$yield)),] %>%
group_by(symbol) %>%
plot_ly(
x = ~date, y = ~term, z = ~yield,
type="scatter3d",
mode="markers",
size=3,
color=~yield
)
@ntankova thanks for the comment. This code is pretty old, and I'm surprised that it works at all :) I think when I posted I was trying to show different ways of getting yields at various maturities and did not include the code for IRX, FVX, etc. These indices still exist and are available, but you are correct that the options on them no longer trade.
I made changes in https://gist.github.com/timelyportfolio/4da9d6b6c89cce26effabccca30124dd/revisions to hopefully get the code working again only using the Federal Reserve series on yields as we did in the surface chart.