如何用R ggplot2绘制带误差线的重复样本均值折线图?
宽格式DataFrame转ggplot适配格式及绘制带误差线折线图
1. 数据格式转换(宽→长)
ggplot要求数据为长格式,用tidyr::pivot_longer(替代旧版gather)可快速拆分列名,分离样本与重复信息:
# 加载tidyverse(包含dplyr、tidyr、ggplot2) library(tidyverse) # 构造你的数据框 df <- tibble( Dilution = c(10, 40, 160, 640, 2560, 10240, 40960, 163840), A2T2.R1 = c(1,1,1,1,102,100,99,99), A2T2.R2 = c(1,1,1,1,101,101,92,97), X293T.R1 = c(1,1,1,1,98,97,98,99), X293T.R2 = c(1,1,1,1,98,97,98,98), TZMbl.R1 = c(1,1,1,36,80,97,98,99), TZMbl.R2 = c(1,1,1,33,78,99,93,100) ) # 转换为长格式:拆分样本与重复列 df_long <- df %>% pivot_longer( cols = -Dilution, names_to = c("Sample", "Replicate"), names_sep = "\\." # 以点号为分隔符拆分列名 )
2. 计算统计量(均值、标准差/标准误)
按Dilution和Sample分组,计算每组的均值、标准差(或标准误):
df_stats <- df_long %>% group_by(Dilution, Sample) %>% summarise( mean_val = mean(value), sd_val = sd(value), # 标准差 se_val = sd(value)/sqrt(n()),# 标准误(标准差/√样本量) .groups = "drop" # 取消分组状态 )
3. 绘制带误差线的折线图
用ggplot绘制折线,同时添加误差线(可选择标准差或标准误):
ggplot(df_stats, aes(x = Dilution, y = mean_val, color = Sample)) + geom_line(linewidth = 1) + geom_point(size = 3) + # 误差线:这里用标准差,替换成se_val即可用标准误 geom_errorbar( aes(ymin = mean_val - sd_val, ymax = mean_val + sd_val), width = 0.1 * max(df_stats$Dilution)/10 # 适配X轴的误差线宽度 ) + scale_x_log10() + # 稀释度为对数变化,用对数轴更直观 labs( x = "稀释度", y = "数值", title = "各样本稀释梯度均值及误差线", color = "样本" ) + theme_bw()
补充:用reshape2::gather实现转换(旧方法)
若坚持使用reshape2的gather,需额外拆分列名:
library(reshape2) df_gather <- gather(df, key = "Sample_Replicate", value = "value", -Dilution) df_gather <- separate(df_gather, Sample_Replicate, into = c("Sample", "Replicate"), sep = "\\.")
内容的提问来源于stack exchange,提问作者user11641357
相关产品推荐
相关产品推荐

