我有一个大的时间序列数据集,其中一个变量是事件保存为因子的日期和时间.我想创建一个矩阵热图,其中x轴显示星期几,y轴显示一天中的时间,因此我们可以看到特定事件发生了多少事件.
我已经能够使用plotCalendarHeatmapTime Projection r包根据时间序列的日期和月份创建频率热图.但是我无法绘制一些近似于一天中的某天与一天中的时间情景.
以下是一些示例代码,类似于我的数据集中的代码:
x <- c(1:18)
y <- factor(c("6/28/2013 7:23", "9/8/2013 17:59", "9/24/2013 10:46", "10/20/2013 18:05", "9/11/2013 17:36", "9/14/2013 23:27", "12/28/2013 6:48", "7/20/2013 17:26", "8/26/2013 7:51", "9/14/2013 9:12", "10/9/2013 22:01", "9/27/2013 16:52", "8/25/2013 8:22", "9/14/2013 23:26", "9/22/2013 18:29", "8/26/2013 21:57", "8/10/2013 13:53", "8/11/2013 17:25"))
data <- data.frame(x,y)
colnames(data) <- c("ID", "starttime")
Run Code Online (Sandbox Code Playgroud)
像这样的东西?

# generate more illustrative dataset: you have this already
set.seed(1)
x <- 1:1000
y <- as.POSIXct("06/01/2013",format="%m/%d/%Y")+sample(0:(210*24*60)*60,1000)
y <- strftime(y,format="%m/%d/%Y %H:%M")
data <- data.frame(ID=x,Starttime=y)
# you start here...
library(lubridate) # for wday(...)
library(ggplot2)
library(RColorBrewer) # for brewer.pal(...)
data$date <- as.POSIXct(data$Starttime, format="%m/%d/%Y %H:%M")
data$dow <- wday(data$date)
data$cdow <- wday(data$date,label=T)
data$tod <- as.numeric(data$date - as.POSIXct(strftime(data$date,format="%Y-%m-%d")))/60
data$bins <- cut(data$tod,breaks=1:24,labels=F)
counts <- aggregate(ID~bins+dow,data,length)
colnames(counts)[ncol(counts)] <- "Events"
ggplot(counts, aes(x=bins,y=8-dow))+
geom_tile(aes(fill=Events))+
scale_fill_gradientn(colours=brewer.pal(9,"YlOrRd"),
breaks=seq(0,max(counts$Events),by=2))+
scale_y_continuous(breaks=7:1,labels=c("Sun","Mon","Tues","Wed","Thurs","Fri","Sat"))+
labs(x="Time of Day (hours)", y="Day of Week")+
coord_fixed()
Run Code Online (Sandbox Code Playgroud)