如何用ggplot2的geom_area堆叠部分匹配的时间段?
问题解答
1. 是否遗漏参数或其他geom?
没有直接可用的参数或geom能解决这个问题。geom_area的堆叠逻辑要求每个x轴位置(这里是日期)都有对应分组(type)的y值,而你当前的数据只有每个时间段的起止点,中间日期没有记录,所以堆叠计算无法正常执行。
2. 是否需要按天拆分数据?如何实现?
必须按天拆分数据,具体步骤是为每个时间段生成包含所有日期的序列,再保留对应的强度值。以下是完整代码:
# Library library(tidyverse) library(lubridate) # Data df <- tibble(date_debut = as_date(c("2022-09-28", "2022-10-05")), intensity = c(0.5, 0.3), duration = days(c(14, 10)), type = c("a", "b")) # 按天拆分数据:生成每个时间段内的所有日期 df_daily <- df %>% mutate(date = map2(date_debut, date_debut + duration, seq, by = "day")) %>% unnest(date) %>% select(-date_debut, -duration) # 绘图:此时堆叠正常生效 df_daily %>% ggplot(aes(x = date, y = intensity, fill = type)) + geom_area(position = "stack")
代码说明
map2(date_debut, date_debut + duration, seq, by = "day"):为每个type生成从开始到结束日期的每日序列unnest(date):将列表格式的日期展开为行,每个日期对应一条记录- 处理后的数据每个日期都有对应type的强度值,
geom_area的position="stack"就能正确计算重叠处的总强度(0.5+0.3=0.8)
内容的提问来源于stack exchange,提问作者Marc-Antoine L
相关产品推荐
相关产品推荐

