-
-
Save raffdoc/2394641 to your computer and use it in GitHub Desktop.
Time Series Heatmaps in ggplot2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require(quantmod) | |
require(ggplot2) | |
require(reshape2) | |
require(plyr) | |
require(scales) | |
# Download some Data, e.g. the CBOE VIX | |
getSymbols("^VIX",src="yahoo") | |
# Make a dataframe | |
dat<-data.frame(date=index(VIX),VIX) | |
# We will facet by year ~ month, and each subgraph will | |
# show week-of-month versus weekday | |
# the year is simple | |
dat$year<-as.numeric(as.POSIXlt(dat$date)$year+1900) | |
# the month too | |
dat$month<-as.numeric(as.POSIXlt(dat$date)$mon+1) | |
# but turn months into ordered facors to control the appearance/ordering in the presentation | |
dat$monthf<-factor(dat$month,levels=as.character(1:12),labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),ordered=TRUE) | |
# the day of week is again easily found | |
dat$weekday = as.POSIXlt(dat$date)$wday | |
# again turn into factors to control appearance/abbreviation and ordering | |
# I use the reverse function rev here to order the week top down in the graph | |
# you can cut it out to reverse week order | |
dat$weekdayf<-factor(dat$weekday,levels=rev(1:7),labels=rev(c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")),ordered=TRUE) | |
# the monthweek part is a bit trickier | |
# first a factor which cuts the data into month chunks | |
dat$yearmonth<-as.yearmon(dat$date) | |
dat$yearmonthf<-factor(dat$yearmonth) | |
# then find the "week of year" for each day | |
dat$week <- as.numeric(format(dat$date,"%W")) | |
# and now for each monthblock we normalize the week to start at 1 | |
dat<-ddply(dat,.(yearmonthf),transform,monthweek=1+week-min(week)) | |
# Now for the plot | |
P<- ggplot(dat, aes(monthweek, weekdayf, fill = VIX.Close)) + | |
geom_tile(colour = "white") + facet_grid(year~monthf) + scale_fill_gradient(low="red", high="yellow") + | |
opts(title = "Time-Series Calendar Heatmap") + xlab("Week of Month") + ylab("") | |
P |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment