R 热图绘制时间与日期对比图

R 热图绘制时间与日期对比图,r,datetime,ggplot2,heatmap,R,Datetime,Ggplot2,Heatmap,我想用ggplot制作一张热图。 结果应该是这样的(尽管y轴需要反转): 下面是示例数据的子集。对于实际应用程序,dataframe有1000多个用户,而不是只有3个。梯度填充应基于用户的值 Date <- seq( from = as.POSIXct("2016-01-01 00:00"), to = as.POSIXct("2016-12-31 23:00"), by = "hour" ) user1 <- runif(length(Date), min

我想用ggplot制作一张热图。 结果应该是这样的(尽管y轴需要反转):

下面是示例数据的子集。对于实际应用程序,dataframe有1000多个用户,而不是只有3个。梯度填充应基于用户的值

Date <- seq(
  from = as.POSIXct("2016-01-01 00:00"),
  to  = as.POSIXct("2016-12-31 23:00"),
  by = "hour"
)    
user1 <- runif(length(Date), min = 0, max = 10)
user2 <- runif(length(Date), min = 0, max = 10)
user3 <- runif(length(Date), min = 0, max = 10)
example <- data.frame(Date, user1, user2, user3)

example$hour <- format(example$Date, format = "%H:%M")
example$total <- rowSums(example[,c(2:4)])
它只显示单个点,而不像连续变量那样显示y轴(scale_y_continuous也没有帮助),尽管变量是连续的

我如何才能像上面提供的示例那样创建热图?
我如何在y轴上做一个很好的截止线(例如,每3小时而不是每小时)?

按照定义数据的方式,您不会得到所需的输出,因为
示例$Date
是一个POSIXct对象,即日期和小时

因此,您必须仅将图表映射到当天:

ggplot(数据=示例)+
geom_光栅(aes(x=as.Date(日期,格式='%d%b%y'),y=hour,fill=total))+
比例填充梯度(低=蓝色,高=红色)

对于第二个问题,您可以这样分组时间:

示例%
分组依据(grp=rep(行号(),长度.out=n(),每个=4))%>%
摘要(日期=as.Date(示例(日期,1),格式=“%d%b%y”),
总计=总计,
时间槽=粘贴(最小(小时)、最大(小时)、sep=“-”)
ggplot(数据=示例)+
geom_光栅(aes(x=日期,y=时隙,填充=总数))+
缩放填充渐变(颜色=(cet pal(6,name=“inferno”))#我喜欢“cetcolor”软件包中的渐变

按照定义数据的方式,您不会得到所需的输出,因为
示例$Date
是一个POSIXct对象,即日期和小时

因此,您必须仅将图表映射到当天:

ggplot(数据=示例)+
geom_光栅(aes(x=as.Date(日期,格式='%d%b%y'),y=hour,fill=total))+
比例填充梯度(低=蓝色,高=红色)

对于第二个问题,您可以这样分组时间:

示例%
分组依据(grp=rep(行号(),长度.out=n(),每个=4))%>%
摘要(日期=as.Date(示例(日期,1),格式=“%d%b%y”),
总计=总计,
时间槽=粘贴(最小(小时)、最大(小时)、sep=“-”)
ggplot(数据=示例)+
geom_光栅(aes(x=日期,y=时隙,填充=总数))+
缩放填充渐变(颜色=(cet pal(6,name=“inferno”))#我喜欢“cetcolor”软件包中的渐变

ggplot(plotHuishoudens, aes(Date, hour, fill = Total)) +
  geom_tile() +
  scale_fill_gradient(low = "blue", high = "red")