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

在ggplot的geom_line中按组计算增长值(排除首个X值)

用ggplot2的after_stat实现组内日期增长值标注

数据集

biceps <- data.frame(hand = c("L", "L", "L", "R", "R", "R"),
                     date = c("2023-07-20", "2023-09-20", "2023-10-29", "2023-07-20", "2023-09-20", "2023-10-29"),
                     size_cm = c(36.8, 37.8, 37.9, 37.1, 38.6, 38.85))

需求

不用提前处理数据集,直接用after_stat()获取每个日期相对前一日期的臂围增长值,每组的首个日期显示+0。

基础代码

ggplot(biceps, aes(x = date, y = size_cm, group = hand)) +
  geom_line() +

完整实现代码

ggplot(biceps, aes(x = date, y = size_cm, group = hand)) +
  geom_line() +
  geom_text(
    aes(label = after_stat(
      ifelse(is.na(y - lag(y)), "+0", sprintf("+%.2f", y - lag(y)))
    )),
    vjust = -0.5,
    size = 3.5
  )

代码说明

  • after_stat(y - lag(y)):在ggplot统计数据的阶段,会自动按group=hand分组,计算当前点和同组前一个点的臂围差值
  • ifelse(is.na(...), "+0", ...):每组第一个点没有前序数据,差值会是NA,直接替换成+0
  • sprintf("+%.2f", ...):把差值格式成带加号的两位小数,增长情况一目了然
  • vjust=-0.5:把文本往上偏移一点,避免和线条重叠

内容的提问来源于stack exchange,提问作者trilisser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:16