如何按样本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
相关产品推荐
相关产品推荐

