修正Y轴极值:R语言绘制BSL深度数据图表异常排查
问题排查与代码修正
原代码核心错误
- 深度转换逻辑完全错误:原代码通过
min(数据$depth) - 数据$depth转换深度,导致浮游生物和岩芯的深度值被颠倒甚至重叠。以浮游生物数据为例,原深度是-10,-20,-30,-40,转换后变成-30,-20,-10,0,岩芯数据转换后同样得到-30,-20,-10,0,所有点都集中在Y轴0附近。 - Y轴范围设置错误:
ylim = c(0, min(core_tops$depth))将Y轴范围设为0到负数,进一步加剧了深度显示的混乱。 - 数据框赋值不规范:使用
<-代替=创建数据框,虽不报错但不符合R的规范写法。
修正后的代码
# 创建规范的数据框 plankton_tow <- data.frame(DO = c(-1.2, -0.8, -0.5, -1.5), depth = c(-10, -20, -30, -40)) core_tops <- data.frame(DO = c(-2.0, -1.6, -1.3, -2.5), depth = c(-50, -60, -70, -80)) # 将负深度转换为正数(直接对应m BSL数值) plankton_tow$depth <- abs(plankton_tow$depth) core_tops$depth <- abs(core_tops$depth) # 设置正方形绘图区域 par(pty = "s") # 绘制浮游生物数据,倒转Y轴实现0m BSL在顶部 plot(plankton_tow$DO, plankton_tow$depth, xlim = range(c(plankton_tow$DO, core_tops$DO)), ylim = c(max(c(plankton_tow$depth, core_tops$depth)), 0), # Y轴从最大深度(80)到0 xlab = expression(delta^18*O ~ "[‰] vs. PDB"), ylab = "Depth [m BSL]", pch = 16, col = "black", xaxt = "n", yaxt = "n") # 添加岩芯顶部数据点 points(core_tops$DO, core_tops$depth, pch = 21, col = "black") # 添加X轴刻度 axis(side = 1, at = seq(min(c(plankton_tow$DO, core_tops$DO)), max(c(plankton_tow$DO, core_tops$DO)), by = 0.5)) # 添加Y轴刻度,0在顶部,80在底部 axis(side = 2, at = seq(0, 80, by = 10), labels = seq(0, 80, by = 10))
修正说明
- 深度转换:用
abs()将负深度值转为正数,直接对应海平面以下的深度(如-10转为10代表10m BSL)。 - Y轴倒转:通过
ylim = c(80, 0)将Y轴范围设置为从最大深度(80m BSL)到0,实现0m BSL位于图表顶部。 - 刻度修正:Y轴刻度直接使用0-80的数值,匹配倒转后的轴范围,确保深度标签显示正确。
内容的提问来源于stack exchange,提问作者Weiss
相关产品推荐
相关产品推荐

