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

R语言ggplot如何实现单图双X轴(底部depth、顶部min)绘制

ggplot 双X轴(底部depth/顶部min)实现方案

ggplot2 支持配置次坐标轴,次轴要求与主轴存在固定的一一映射关系,你当前数据里depth和min是逐行位置对应的关系,直接通过sec_axis()配置即可实现需求,不需要额外做数据转换。

完整实现代码

先确认数据框LHB结构和给出的示例一致,在原有代码基础上添加X轴刻度配置即可:

library(ggplot2)

# 示例数据赋值(如果已读入LHB可跳过这段)
LHB <- read.table(text = "
depth     s.den    c.den      bd      car  X  min
1      1 0.3023393 2.859395 0.05735 35.74244  0 2017
2      2 0.3055764 3.373670 0.07015 42.17087  1 1987
3      3 0.3367664 4.629492 0.09165 42.08629  2 1954
4      4 0.3318848 3.789447 0.07765 37.89447  3 1941
5      5 0.3178764 3.432860 0.07075 31.20782  4 1920
6      6 0.2401508 2.808528 0.06045 28.08528  5 1909
7      7 0.3044616 2.480078 0.05715 22.54617  6 1889
8      8 0.4002132 3.250899 0.06770 32.50899  7 1878
9      9 0.4551193 2.901270 0.05735 29.01270  8 1860
", header = TRUE)

# 修正后的绘图代码
CAR <- ggplot()+
  geom_line(data = LHB, mapping = aes(x = depth, y = car), col = 'black') +
  ggtitle("CARLHB") +
  # 配置底部主X轴+顶部次X轴
  scale_x_continuous(
    name = "Depth (cm)",
    breaks = LHB$depth,
    sec.axis = sec_axis(
      trans = ~., # 次轴与主轴位置1:1映射,无需数值变换
      breaks = LHB$depth, # 次轴刻度位置与主轴完全对齐
      labels = LHB$min, # 对应位置替换为min列的年份标签
      name = "Year"
    )
  ) +
  ylab(bquote(Carbon~Accumulation~(g~C/m^2/yr^-1))) 

CAR

参数说明

  • trans = ~.表示次轴和主轴的坐标位置完全对应,因为两个X轴的刻度点位置重合,仅显示标签不同,不需要做缩放、偏移类的数值转换
  • 如果后续数据量更新,只需要保证breaks传入所有depth值、labels传入对应位置的min值即可,不需要改动其他逻辑
  • 如果需要调整顶部轴的文字、刻度线样式,可以在theme()中通过axis.text.x.top、axis.title.x.top参数单独配置样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:54:25