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

如何按样本A/B/C逐日计算均值并在ggplot2中添加最佳拟合线

搞定样本A/B/C的逐日均值计算与ggplot2可视化

嗨,我来帮你完成这个计算均值和绘图的需求!咱们一步步来:

1. 数据准备与均值计算

首先,你提供的B样本Day3的数据有点不完整,我先补全一个示例数据集(你直接替换成自己的真实数据就行):

# 构造示例完整数据(替换成你的真实数据)
df <- data.frame(
  Day = rep(c(3,4,5), each = 15*3), # 每个天数每个样本15个测量值
  Sample = rep(c("A","B","C"), each = 15, times = 3),
  Measurement = c(
    # Day3 A的测量值(你提供的)
    0.648,0.661,0.65,0.594,0.548,0.653,0.648,0.672,0.661,0.66,0.647,0.629,0.691,0.534,0.567,
    # Day3 B的示例值
    0.689,0.701,0.695,0.678,0.712,0.690,0.705,0.682,0.698,0.710,0.675,0.688,0.702,0.693,0.707,
    # Day3 C的示例值
    0.589,0.602,0.595,0.578,0.612,0.590,0.605,0.582,0.598,0.610,0.575,0.588,0.602,0.593,0.607,
    # Day4 A的示例值
    0.668,0.671,0.665,0.614,0.568,0.673,0.668,0.692,0.681,0.680,0.667,0.649,0.711,0.554,0.587,
    # Day4 B的示例值
    0.709,0.721,0.715,0.698,0.732,0.710,0.725,0.702,0.718,0.730,0.695,0.708,0.722,0.713,0.727,
    # Day4 C的示例值
    0.609,0.622,0.615,0.598,0.632,0.610,0.625,0.602,0.618,0.630,0.595,0.608,0.622,0.613,0.627,
    # Day5 A的示例值
    0.688,0.691,0.685,0.634,0.588,0.693,0.688,0.712,0.701,0.700,0.687,0.669,0.731,0.574,0.607,
    # Day5 B的示例值
    0.729,0.741,0.735,0.718,0.752,0.730,0.745,0.722,0.738,0.750,0.715,0.728,0.742,0.733,0.747,
    # Day5 C的示例值
    0.629,0.642,0.635,0.618,0.652,0.630,0.645,0.622,0.638,0.650,0.615,0.628,0.642,0.633,0.647
  )
)

接下来用dplyr包计算每个样本每天的均值,分组统计用这个包超顺手:

library(dplyr)

# 按Day和Sample分组,计算测量值的均值(na.rm=TRUE处理可能的缺失值)
daily_mean <- df %>%
  group_by(Day, Sample) %>%
  summarise(Mean_Measurement = mean(Measurement, na.rm = TRUE), .groups = "drop")

# 可以打印看看计算结果
print(daily_mean)

2. 用ggplot2绘制散点图+均值拟合线

现在咱们来画图,既要展示原始的测量值散点,又要加上连接逐日均值的拟合线:

library(ggplot2)

ggplot() +
  # 绘制原始测量值的散点,按样本区分颜色,半透明避免重叠
  geom_point(data = df, aes(x = Day, y = Measurement, color = Sample), alpha = 0.5, size = 2) +
  # 用特殊形状突出显示逐日均值点(可选,嫌麻烦可以去掉这行)
  geom_point(data = daily_mean, aes(x = Day, y = Mean_Measurement, color = Sample), size = 3, shape = 18) +
  # 添加均值的最佳拟合线,这里用线性拟合(method="lm"),如果要平滑线可以换成"loess"
  geom_smooth(data = daily_mean, aes(x = Day, y = Mean_Measurement, color = Sample), method = "lm", se = FALSE, linewidth = 1.2) +
  # 给图表加个好看的标题和标签
  labs(
    title = "样本A/B/C测量值散点图与逐日均值拟合线",
    x = "天数",
    y = "测量值",
    color = "样本"
  ) +
  # 用简洁的主题样式
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))

小提示:

  • 如果你的Day是字符型(比如"Day3"这种),记得先转成数值型:df$Day <- as.numeric(sub("Day", "", df$Day))
  • 要是不需要原始散点,只留均值和拟合线,直接删掉geom_point(data = df, ...)那一行就行
  • se = FALSE是去掉拟合线的置信区间,要是需要展示置信区间,把这个参数删掉或者改成se = TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:26:51