gpt4 book ai didi

R ggplot2 geom_rect 堆叠起来

转载 作者:行者123 更新时间:2023-12-01 11:41:40 26 4
gpt4 key购买 nike

我想在时间尺度上叠加一个图。以下是我的数据:

 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()

以上生成此图:

enter image description here

但是,只要有重叠,我就想叠加这些矩形。即在 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"))

enter image description here

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com