You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:35:24