使用ggplot2绘制钙浓度随深度的平均值图(含误差棒需求)
问题描述
我有不同深度的钙浓度数据,每个深度做了三次重复测量。目前已能绘制所有单个钙浓度测量值的分布图(代码及图示如下),但不知如何绘制各深度对应的平均钙浓度图。最终我还需要为钙浓度添加标准差误差棒,不过这部分可后续处理。感谢帮助!
无深度平均的钙浓度随深度变化图:
现有代码:
Ca = ggplot(data = XRF, aes(x=Ca, y=depth)) + geom_point(aes(colour = Core)) + labs(title = "XRF Ca ppm with Depth at 1445A") + xlab("Ca (ppm)") + ylab("depth (mbsf)") + scale_y_reverse() Ca
解决方案
1. 计算各深度的平均钙浓度
先通过分组计算得到每个深度、每个Core对应的钙浓度均值,推荐用dplyr包处理:
# 未安装dplyr的话先执行安装 # install.packages("dplyr") library(dplyr) # 按depth和Core分组,计算平均Ca浓度 XRF_avg <- XRF %>% group_by(depth, Core) %>% summarise(avg_Ca = mean(Ca, na.rm = TRUE), .groups = "drop")
na.rm = TRUE用于忽略缺失值,可根据你的数据实际情况调整。
2. 绘制平均钙浓度图
用计算好的均值数据画图,逻辑和你原来的代码一致,仅替换x轴为均值即可:
Ca_avg <- ggplot(data = XRF_avg, aes(x=avg_Ca, y=depth)) + geom_point(aes(colour = Core), size = 3) # 增大点的尺寸,方便区分原始测量点 labs(title = "Average XRF Ca ppm with Depth at 1445A") + xlab("Average Ca (ppm)") + ylab("depth (mbsf)") + scale_y_reverse() Ca_avg
如果想同时展示原始数据点和均值点,可叠加两个图层:
Ca_combined <- ggplot(data = XRF, aes(x=Ca, y=depth)) + geom_point(aes(colour = Core), alpha = 0.5) # 原始点设半透明,避免遮挡均值点 geom_point(data = XRF_avg, aes(x=avg_Ca, colour = Core), size = 3, shape = 18) # 均值点用特殊形状区分 labs(title = "XRF Ca ppm (Raw & Average) with Depth at 1445A") + xlab("Ca (ppm)") + ylab("depth (mbsf)") + scale_y_reverse() Ca_combined
后续添加标准差误差棒的提前准备
之后要加误差棒的话,只需在计算均值时同步算出标准差:
XRF_avg_sd <- XRF %>% group_by(depth, Core) %>% summarise(avg_Ca = mean(Ca, na.rm = TRUE), sd_Ca = sd(Ca, na.rm = TRUE), .groups = "drop")
再用geom_errorbarh添加水平误差棒:
Ca_avg_error <- ggplot(data = XRF_avg_sd, aes(x=avg_Ca, y=depth)) + geom_point(aes(colour = Core), size = 3) + geom_errorbarh(aes(xmin = avg_Ca - sd_Ca, xmax = avg_Ca + sd_Ca, colour = Core), height = 0.1) labs(title = "Average XRF Ca ppm with Depth (with SD Error Bars) at 1445A") + xlab("Average Ca (ppm)") + ylab("depth (mbsf)") + scale_y_reverse() Ca_avg_error
内容的提问来源于stack exchange,提问作者Rachel Clifford
相关产品推荐
相关产品推荐

