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

如何在ggplot2中添加各分类变量折线的平均趋势线

给mtcars分组折线图添加平均值折线

要实现需求,你可以通过两种方式添加三类数据的平均值折线:

方法一:预处理平均值数据

先计算每个mpg对应的所有gear组的drat平均值,再将原数据与平均值数据结合绘制:

# 加载所需包
library(ggplot2)
library(dplyr)

# 计算每个mpg对应的drat平均值
mtcars_avg <- mtcars %>%
  group_by(mpg) %>%
  summarise(avg_drat = mean(drat), .groups = "drop")

# 绘制图表
ggplot() +
  # 原分组折线
  geom_line(data = mtcars, aes(x = mpg, y = drat, colour = factor(gear))) +
  # 平均值折线,设置黑色粗线区分
  geom_line(data = mtcars_avg, aes(x = mpg, y = avg_drat), colour = "black", size = 1) +
  # 调整图例与标签
  labs(colour = "齿轮数") +
  scale_colour_discrete(labels = c("3", "4", "5")) +
  # 为平均值折线添加图例条目
  scale_linetype_manual(values = 1, name = "", labels = "平均值") +
  guides(colour = guide_legend(order = 1), linetype = guide_legend(order = 2))

方法二:使用stat_summary直接计算绘制

无需额外预处理,用stat_summary在绘图时自动计算并绘制平均值折线:

library(ggplot2)

ggplot(mtcars, aes(x = mpg, y = drat)) +
  # 原分组折线
  geom_line(aes(colour = factor(gear))) +
  # 自动计算并绘制平均值折线
  stat_summary(fun = mean, geom = "line", colour = "black", size = 1, aes(group = 1)) +
  # 调整图例与标签
  labs(colour = "齿轮数") +
  scale_colour_discrete(labels = c("3", "4", "5")) +
  guides(
    colour = guide_legend(order = 1),
    linetype = guide_legend(title = "", labels = "平均值", order = 2)
  )

关键说明

  • 两种方法都通过group=1(方法二)或单独的平均值数据集(方法一)确保平均值点连接成一条完整折线。
  • 用黑色粗线区分平均值折线,同时调整图例顺序让图表更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:27