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

如何在R的geom_line折线图中添加均值趋势线?

解决ggplot2添加整体均值虚线的问题

问题原因

你之前的尝试失败有两个核心原因:

  • stat_smooth 无法生效:因为你的Period是字符型分类变量,该函数默认基于连续型x做回归拟合,没法对分类x生成趋势线。
  • stat_summary 失效:原绘图代码中aes(group=Name)会让stat_summary按每个Name分组计算均值,而非按Period计算所有样本的整体均值,因此无法画出跨Period的均值线。

解决方案

以下两种方法都能实现需求,选其一即可:

方法1:先预处理计算均值,再添加折线

先按Period分组计算均值,生成单独的均值数据集,再用geom_line添加虚线:

# 加载dplyr用于数据分组汇总(未安装则先运行install.packages("dplyr"))
library(dplyr)

# 计算每个Period的Value均值
mean_df <- df %>%
  group_by(Period) %>%
  summarise(Mean_Value = mean(Value))

# 绘制原图+均值虚线
p <- ggplot(df, aes(x=Period, y=Value, group=Name)) +
  geom_line(aes(color=Name)) +
  # 添加均值虚线,group=1确保分类x的点能连成线
  geom_line(data = mean_df, aes(x = Period, y = Mean_Value, group = 1),
            linetype = "dashed", color = "black", size = 1)

p

方法2:直接用stat_summary指定全局分组

无需预处理,直接在stat_summary中覆盖group参数,强制按全局计算均值并连线:

p <- ggplot(df, aes(x=Period, y=Value, group=Name)) +
  geom_line(aes(color=Name)) +
  # group=1覆盖原分组,fun=mean计算均值,linetype设为虚线
  stat_summary(aes(group = 1), fun = mean, geom = "line",
               linetype = "dashed", color = "black", size = 1)

p

参数说明

  • linetype = "dashed":设置线条为虚线,满足样式需求;
  • color = "black":指定均值线颜色,可按需修改;
  • size = 1:调整线条粗细,可根据视觉效果调整数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:55:25