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

ggplot2如何为各月份分组添加对应中位数水平线

实现方法

你之前的写法无法实现分月中位数线,是因为geom_hline()不会自动按aes()中指定的group分组计算统计量,median(metric)会对全数据集计算得到唯一值,所以只能生成一条全局中位数线。

最简单的实现方式是直接用stat_summary()层,无需提前手动计算分组中位数,代码如下:

ggplot(data, aes(x = month, y = metric)) +
  # 将年份相关的分组和颜色映射放到geom_line内,避免影响统计层的分组逻辑
  geom_line(aes(color = year, group = year)) +
  # 按x轴(月份)分组计算中位数,生成水平虚线
  stat_summary(
    fun = median, 
    geom = "hline", 
    aes(yintercept = after_stat(y)),
    linetype = "dashed",
    color = "gray50"
  )

如果希望中位数线和折线共用同一套颜色映射,也可以保留全局颜色映射,手动指定统计层的分组逻辑为月份即可:

ggplot(data, aes(x = month, y = metric, color = year, group = year)) +
  geom_line() +
  stat_summary(
    fun = median,
    geom = "hline",
    aes(yintercept = after_stat(y), group = month),
    linetype = "dashed"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:54:09