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

如何用geom_line绘制多列行均值并通过geom_smooth展示标准差?

解决方法

你的问题核心在于:geom_smooth 默认生成的是拟合模型的置信区间,而非原始数据的标准差范围。要展示行均值对应的标准差,需要先计算每个年份的均值和标准差,再用 geom_ribbon 绘制区间,配合平滑线展示。

修正步骤与代码:

  1. 将宽格式数据转为长格式,简化分组统计操作
  2. 按年份分组计算均值、标准差
  3. 绘制各WUE系列折线 + 均值平滑线 + 标准差区间
library(ggplot2)
library(tidyr)
library(dplyr)

# 1. 转换数据格式:宽转长,把多列WUE数据整合为两列
wue_long <- wue_r %>%
  pivot_longer(cols = starts_with("WUE"), names_to = "WUE_type", values_to = "WUE_value")

# 2. 按年份分组,计算每个年份的WUE均值和标准差
wue_stats <- wue_long %>%
  group_by(Year) %>%
  summarise(
    mean_wue = mean(WUE_value, na.rm = TRUE),
    sd_wue = sd(WUE_value, na.rm = TRUE)
  )

# 3. 绘制图形
colors <- c("WUE16"="chartreuse", "WUE19"="chartreuse3",  
            "WUE27"="darkgreen", "WUE17"="darkolivegreen", "均值"="black")

plot1 <- ggplot() +
  # 绘制各WUE系列的原始折线
  geom_line(data = wue_long, aes(x = Year, y = WUE_value, color = WUE_type), linewidth = 1.75) +
  # 绘制均值的平滑线(关闭默认置信区间)
  geom_smooth(data = wue_stats, aes(x = Year, y = mean_wue, color = "均值"), 
              span = 0.2, linetype = "twodash", linewidth = 2, se = FALSE) +
  # 绘制标准差区间(均值±标准差),用半透明灰色填充
  geom_ribbon(data = wue_stats, aes(x = Year, ymin = mean_wue - sd_wue, ymax = mean_wue + sd_wue),
              fill = "grey", alpha = 0.3) +
  labs(color = "Legend") +
  scale_color_manual(values = colors)

print(plot1)

关键说明:

  • 用pivot_longer转长格式后,无需重复编写多条geom_line,代码更简洁易维护
  • group_by + summarise是计算年份维度统计量的标准方式,确保每个年份的均值和标准差对应正确
  • geom_ribbon是绘制区间范围的专用函数,alpha参数控制填充透明度,避免遮挡下层折线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:21