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

R语言绘制列对应不同日期的数据集均值散点/折线图方法咨询

核心解决思路

你当前计算得到的均值、标准差表为宽表结构(每日数值单独成列),ggplot2默认需要长表结构(所有观测值放在同一列,新增单独列标注对应日期、处理分组),转换后即可一次性完成所有分组、日期的图形绘制,无需逐个添加图层。

完整可运行代码

# 加载所需包
library(ggplot2)
library(tidyr)
library(dplyr)

# 你的原始示例数据
df <- data.frame(
  treatment = rep(c("t1","t2","t3"), each=3),
  `day 1` = c(7.524814,6.056334,6.834753,4.377818,4.104087,4.520651,7.378768,7.875438,7.803648),
  `day 2` = c(8.330983,6.138648,7.070450,4.964445,4.942359,4.775113,8.375725,8.543303,8.232132),
  `day 3` = c(6.639391,5.439239,5.895462,3.990593,3.589360,3.753422,7.210010,8.101697,7.073342),
  check.names = FALSE
)

# 计算均值、标准差,重命名分组列
mean_df <- aggregate(df[,2:4], list(df$treatment), mean) %>% rename(treatment = Group.1)
sd_df <- aggregate(df[,2:4], list(df$treatment), sd) %>% rename(treatment = Group.1)

# 宽表转长表,合并均值和标准差
mean_long <- pivot_longer(mean_df, cols = -treatment, names_to = "day", values_to = "mean_val")
sd_long <- pivot_longer(sd_df, cols = -treatment, names_to = "day", values_to = "sd_val")
plot_data <- left_join(mean_long, sd_long, by = c("treatment", "day"))

# 转换day列为数值型,保证x轴顺序正确
plot_data$day <- as.numeric(gsub("day ", "", plot_data$day))

# 绘图:散点+折线+误差棒,按处理分组变色
ggplot(plot_data, aes(x = day, y = mean_val, color = treatment, group = treatment)) +
  geom_line(linewidth = 1) + # 折线层
  geom_point(size = 3) + # 散点层
  geom_errorbar(aes(ymin = mean_val - sd_val, ymax = mean_val + sd_val), width = 0.1) + # 误差棒层
  labs(x = "测量天数", y = "测量均值", color = "处理分组") + # 坐标轴和图例名称
  theme_bw() # 清爽主题

关键说明

如果只需要绘制散点图,删掉geom_line和geom_errorbar两行代码即可,仅保留geom_point层就能一次生成所有处理、所有日期的散点。

内容的提问来源于stack exchange,提问作者Gonzalo de Quesada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:07