Rとggplotでダブルプロットを作る
めちゃくちゃ久しぶりに備忘録。
Rにてダブルプロット。
ggplot2のgeom_rasterを使ってる。
こんなかんじ。
library(ggplot2) .doublePlot<-function(z, start.datetime, one.day.size, max.count=NULL){ bin.size.in.secs<-(60*60*24)%/%one.day.size if (is.null(max.count)) max.count<-max(z) if (length(z)%%one.day.size!=0) z<-z[seq((length(z)%/%one.day.size)*one.day.size)] df1<-expand.grid(time=start.datetime+(seq(one.day.size)-1)*bin.size.in.secs, day=seq(length(z)%/%one.day.size)) df1$z<-z/max.count df2<-expand.grid(time=60*60*24+start.datetime+(seq(one.day.size)-1)*bin.size.in.secs, day=seq(length(z)%/%one.day.size)) df2$z<-c(z[seq(length(z)-one.day.size)+one.day.size], rep(NA, one.day.size))/max.count p<-ggplot(rbind(df1, df2)) p<-p+geom_raster(aes(x=time, y=day, fill=z)) p<-p+scale_x_datetime(breaks=start.datetime+60*60*6*(0:8), labels = scales::date_format("%H:%M"), expand=c(0,0)) p<-p+scale_y_reverse(breaks=c(seq(length(z)%/%one.day.size)), expand=c(0,0)) p<-p+scale_fill_gradient(low="white", high="black") }
サンプルデータをかってにつくって、表示してみる。
z<-as.vector((rbind(matrix(rnorm(12*12*30, mean=1000, sd=1000), ncol=30), matrix(rnorm(12*12*30, mean=100, sd=500), ncol=30)))^2) z[sample(seq(12*24*30),3000)]<-z[sample(seq(12*24*30),3000)] start.datetime<-strptime("201311070600", format="%Y%m%d%H%M") one.day.size<-12*24 print(.doublePlot(z, start.datetime, one.day.size))