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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:05:16