我想在时间尺度上叠加一个情节。下面是我的数据:
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/