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

如何用ggplot2绘制带误差棒的多组时间序列折线图?

我希望使用ggplot2或其他可行工具,基于以下tibble格式的Results_CMT数据绘制x-y图:

# A tibble: 22 x 5
# Groups: Day, Soil_Number [10]
   Day Soil_Number Sample  Mean    SD
  <int>       <int> <chr>  <dbl> <dbl>
1  3.84        0.230 # 注:该行应为输入排版错误,忽略处理
2     0       65872 R      4.82  0.679
3     1       65871 R      3.80  1.10
4     1       65872 R      3.24  1.61
5     3       65871 fLF    NA    NA
6     3       65871 HF     1.73  0.795
7     3       65871 oLF    0.360 0.129
8     3       65871 R      3.13  1.36
9     3       65872 fLF    NA    NA
10     3       65872 HF     1.86  0.374
# ... with 12 more rows

要求按Day、Soil_Number、Sample分组,以Day为时间轴作为x轴,Mean为y轴,SD作为误差棒,最终生成8条折线(对应65871 R、65871 HF、65871 fLF、65871 oLF、65872 R、65872 HF、65872 fLF、65872 oLF)。请问是否需要将Day、Soil_Number和Sample合并为新列?

解答

是否需要合并列?

其实不强制要求合并,但把Soil_Number和Sample合并成一个新的分组列(比如叫Group)会让你的ggplot2代码更简洁直观。毕竟你要的8条折线本质上是这两个变量的组合,合并后分组逻辑一目了然,后续调整也更方便。当然,你也可以不合并,直接用interaction(Soil_Number, Sample)来指定分组,但合并列的写法可读性更高,维护起来也更轻松(Day不需要加入合并,它是x轴的时间变量,不是分组维度)。

ggplot2绘图代码示例

第一步:数据预处理(可选但推荐)

先清理无效行并创建合并分组列:

library(tidyverse)

# 清理Day/Mean为NA的无效行,同时创建分组列
cleaned_data <- Results_CMT %>%
  filter(!is.na(Day), !is.na(Mean)) %>%
  mutate(Group = paste(Soil_Number, Sample, sep = " "))

第二步:绘制折线图+误差棒

ggplot(cleaned_data, aes(x = Day, y = Mean, color = Group)) +
  # 按分组绘制折线
  geom_line(aes(group = Group), na.rm = TRUE) +
  # 添加SD误差棒,width控制横向宽度
  geom_errorbar(aes(ymin = Mean - SD, ymax = Mean + SD), width = 0.2, na.rm = TRUE) +
  # 添加数据点标记
  geom_point(na.rm = TRUE) +
  # 自定义图表标签
  labs(
    x = "Day",
    y = "Mean Value",
    color = "Sample Group",
    title = "Mean Values Over Time by Sample Group",
    subtitle = "With Standard Deviation Error Bars"
  ) +
  # 用简洁的主题美化
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  )

额外说明

  • 如果不想合并列,只需要把代码里的color = Group和group = Group替换成color = interaction(Soil_Number, Sample)和group = interaction(Soil_Number, Sample),效果完全一致。
  • na.rm = TRUE是为了跳过Mean或SD为NA的行(比如fLF组的部分缺失数据),避免绘图报错。
  • 你可以根据需求调整颜色方案、误差棒样式、主题等参数,让图表更贴合你的展示场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:13:34