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

求助:如何用ggplot绘制分组带标准差的DataFrame折线图

解决方案

步骤1:加载所需工具包

先加载tidyverse,它包含数据重塑、统计计算和绘图的全套工具:

library(tidyverse)

步骤2:把宽格式数据转成长期格式

你的数据是宽格式(每个时间点一列分数),必须转成长格式才能用ggplot做分组折线图。用pivot_longer合并所有分数列:

score_long <- score %>%
  pivot_longer(
    cols = starts_with("S_"),  # 匹配所有以S_开头的分数列
    names_to = "time_point",   # 新列名:记录是S_Base/S1到S10
    values_to = "score"        # 新列名:存储对应分数值
  )

步骤3:计算分组的均值与标准差

按组别和时间点分组,算出每个组在每个时间点的平均分数及标准差:

summary_data <- score_long %>%
  group_by(Group, time_point) %>%
  summarise(
    mean_score = mean(score, na.rm = TRUE),
    sd_score = sd(score, na.rm = TRUE),
    .groups = "drop"  # 计算完成后取消分组状态
  )

na.rm = TRUE是为了处理可能存在的缺失值,避免计算报错。

步骤4:绘制带标准差的分组折线图

用ggplot生成折线图,同时添加误差线展示标准差:

ggplot(summary_data, aes(x = time_point, y = mean_score, color = factor(Group), group = Group)) +
  geom_line(linewidth = 1) +  # 绘制分组折线
  geom_point(size = 3) +      # 标记每个时间点的均值
  geom_errorbar(
    aes(ymin = mean_score - sd_score, ymax = mean_score + sd_score),
    width = 0.2,
    position = position_dodge(0.2)  # 误差线错开,避免分组重叠
  ) +
  labs(
    x = "时间点",
    y = "平均分数",
    color = "组别",
    title = "不同组别各时间点分数变化(带标准差)"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签,防止重叠

补充:修正时间点顺序

如果x轴的时间点顺序混乱(比如S10排在S1前面),可以手动指定顺序:

summary_data$time_point <- factor(
  summary_data$time_point,
  levels = c("S_Base", "S1_score", "S2_score", "S3_score", "S4_score", "S5_score", "S6_score", "S7_score", "S8_score", "S9_score", "S10_score")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:16