I liked this chart a lot.
#Dailychart: Argentina's plunging peso is not alone: http://t.co/CWnaNLcm4T pic.twitter.com/4Nr6EgRGx9
— The Economist (@ECONdailycharts) January 27, 2014
I thought I would show how we can semi-replicate it in R with rCharts. Here it is with the currencies that are on FRED with dimplejs.
… and here with nvd3.
Code to replicate from Github Gist:
require(quantmod) | |
require(xtsExtra) | |
require(reshape2) | |
library(rCharts) | |
#turn off rstudio viewer which is default now | |
options(viewer=NULL) | |
currencies <- c( | |
"DEXBZUS", #Brazil | |
"DEXINUS", #India | |
"DEXSFUS", #South Africa | |
"DEXMXUS" #Mexico | |
) | |
getSymbols(currencies, src="FRED") | |
currencies.xts <- na.omit(do.call(merge,lapply(currencies,get))) | |
#get inverse for emerging currency/US$ | |
currencies.xts <- 1/currencies.xts | |
#do check for reasonableness | |
xtsExtra::plot.xts(currencies.xts["2007::",]) | |
#get pct change from 2013 | |
currencies.pct <- | |
currencies.xts["2013::",]/ | |
matrix( | |
rep( | |
as.vector(head(currencies.xts["2013",],1)), #first day of the year | |
NROW(currencies.xts["2013::",]) #repeat for each row | |
), | |
ncol=length(currencies), | |
byrow=T | |
) - 1 | |
#another reasonableness check | |
xtsExtra::plot.xts(currencies.pct) | |
xtsExtra::plot.xts(currencies.pct,screens=1) | |
currencies.df <- data.frame( | |
format(index(currencies.pct),"%Y-%m-%d"), | |
currencies.pct, | |
stringsAsFactors = FALSE | |
) | |
colnames(currencies.df) <- c("Date","Brazil","India","South Africa","Mexico") | |
currencies.df <- melt(currencies.df, id.vars=1) | |
colnames(currencies.df) <- c("Date","Country","ExchangeRate") | |
#dimple plot | |
d1 <- dPlot( | |
ExchangeRate ~ Date, | |
groups = "Country", | |
data = currencies.df, | |
type = "line" | |
) | |
d1$xAxis( | |
type = "addTimeAxis", | |
inputFormat = "%Y-%m-%d", | |
outputFormat = "%b %Y" | |
) | |
d1$yAxis( | |
outputFormat = "0.2%" | |
) | |
d1 | |
#nvd3 plot | |
#convert date | |
currencies.df$Date = as.Date(currencies.df$Date) | |
n1 <- nPlot( | |
ExchangeRate ~ Date, | |
group = "Country", | |
data = currencies.df, | |
type = "lineWithFocusChart" | |
) | |
n1$xAxis( | |
tickFormat = | |
"#! function(d) { | |
return d3.time.format('%b %Y')(new Date(d * 86400000)); | |
} !#" | |
) | |
n1$yAxis(tickFormat = "#!d3.format('0.2%')!#") | |
n1 |