如何在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
相关产品推荐
相关产品推荐

