在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,直接替换成+0sprintf("+%.2f", ...):把差值格式成带加号的两位小数,增长情况一目了然vjust=-0.5:把文本往上偏移一点,避免和线条重叠
内容的提问来源于stack exchange,提问作者trilisser
相关产品推荐
相关产品推荐

