如何在R语言中绘制均值线并填充最值数据点间区域?
实现方法
1. 先预处理数据,计算分组统计量
你需要先按Model和Length分组,算出每组Mass的均值、最大值、最小值(如果你的最值是全局维度的,只按Model分组即可):
library(dplyr) # 生成包含统计量的汇总数据集,忽略NA值 summary_df <- MassModels %>% group_by(Model, Length) %>% summarise( mean_mass = mean(Mass, na.rm = TRUE), max_mass = max(Mass, na.rm = TRUE), min_mass = min(Mass, na.rm = TRUE), .groups = "drop" # 取消分组状态,方便后续绘图 )
2. 修改绘图代码
保留原有的点样式、主题和标签,替换掉geom_smooth,改用汇总数据绘制均值线和填充最值区间:
ggplot() + # 填充最大值与最小值之间的区域,用alpha降低透明度避免遮挡点和线 geom_ribbon(data = summary_df, aes(x = Length, ymin = min_mass, ymax = max_mass, fill = Model), alpha = 0.2) + # 绘制均值线 geom_line(data = summary_df, aes(x = Length, y = mean_mass, color = Model)) + # 绘制原始数据点 geom_point(data = MassModels, aes(x = Length, y = Mass, color = Model, shape = Model)) + # 保留你原来的样式设置 scale_shape_manual(values = c(1,2,0,3,4,8,10)) + theme(legend.position="none") + labs(x=expression("TL (cm)"), y=expression(M[b] (kg)))
关键细节说明
- 因为要同时使用原始数据和汇总数据,所以ggplot初始不指定全局数据集,而是在每个
geom_*里单独绑定对应的数据 geom_ribbon是填充区间的核心函数,ymin和ymax分别对应最小值和最大值列- 如果你的最值是整体的(不是随Length变化的),只需要把
group_by(Model, Length)改成group_by(Model)即可
内容的提问来源于stack exchange,提问作者Arthur Erb
相关产品推荐
相关产品推荐

