我想在时间尺度上叠加一个情节。下面是我的数据:

 Flight_No Dest      Date  Time STD.60 STD.45      Date2          start       end
1    ab0729  KP 14-Oct-13 00:05      1      0 2013-10-14 2013-10-14 00:05:00 2013-10-14 00:20:00
2    ab8063  KI 14-Oct-13 00:20      0      3 2013-10-14 2013-10-14 00:20:00 2013-10-14 00:35:00
3    ab0337  ST 14-Oct-13 00:30      1      0 2013-10-14 2013-10-14 00:30:00 2013-10-14 00:45:00

下面是我绘制图形的代码:
data$Total<-data$STD.60+data$STD.45
ggplot(data,aes(x=start,y=Total,xmin=start,xmax=end,ymin=0,ymax=Total,alpha=0,fill=factor(Dest)))+geom_rect()

上面产生这个图:

但是,只要有重叠,我就想堆叠这些矩形。即在 00:30 到 00:35 之间,y 轴值应显示为 4 而不是 3。

请帮忙。

最佳答案

一旦日期被排序,很容易计算重叠的范围。
对于每个间隔,我检查是否有任何重叠(开始>结束),如果有,我将下一个总数与下一个总数添加到当前一个。

## choose just relevant columns
d <- dat[,c('start','end','Dest','Total')]
# Make sure the data is sorted
d <- d[ order(d$start), ]
h <- d
## here all the main stuff
for (i in head(seq_len(nrow(d)),-1)){
  if(d[i+1,'start'] < d[i,'end']){
    xx <- d[i,]
    xx$start <- d[i+1,'start']
    xx$Total <- d[i,'Total'] +d[i+1,'Total']
    h <- rbind(h,xx)
  }
}

library(ggplot2)
ggplot(h,aes(x=start,y=Total,xmin=start,xmax=end,ymin=0,ymax=Total,
             ,fill=factor(Dest),alpha=0))+
  geom_rect()

编辑

我使用 scale_x_datetime 添加手动 x 轴标签。我也在使用 scales 包来格式化日期。
library(scales)
last_plot()
scale_x_datetime(breaks=unique(c(h$start,h$end)),
               labels = date_format("%H:%M"))

关于R ggplot2 geom_rect 堆积起来,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19873763/

10-12 19:40