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

如何在ggplot2中为第三轴添加自定义标签(忽略Inf值)

问题:ggplot2中添加自定义顶部X轴标签

现有数据框dd:

dd=structure(list(req = c(0, 6.24296787098387e-05, 0.000124859357419677, 
0.000187289036129516, 0.000249718714839355, 0.000312148393549194
), st = c(4.20392459337459, 3.101869731322, 3.05827365904846, 
2.55875394873998, 1.61722938145694, 0.969328686413803), tt = c(1.66320917439717, 
1.46619835076717, 1.47423709334019, 1.39210979230404, 1.24099973128753, 
1.15120693233888), nn = c(2.09771326762665, 1.74025312387583, 
1.74965887129391, 1.64515722021115, 1.38734468460281, 1.30261082263608
)), row.names = c(NA, 6L), class = "data.frame")

已用以下代码绘制基础折线图:

ggplot(data = dd, aes(x=req))  + 
  geom_line(aes(y=st), size = .8) 

fs <- pretty(dd[["req"]])
pers <- round(1 / fs, 2)

在基础绘图中可通过axis(3, at = req, labels = pers)实现将pers(忽略Inf值)作为顶部轴标签,请问如何在ggplot2中实现该需求?


解决方案

在ggplot2中,可通过scale_x_continuous()的sec.axis参数实现顶部自定义轴,步骤如下:

  1. 过滤无效标签:先剔除pers中的Inf值,同时保留对应的主刻度位置:
# 筛选非Inf的标签及对应位置
valid_idx <- !is.infinite(pers)
fs_valid <- fs[valid_idx]
pers_valid <- pers[valid_idx]
  1. 绘制带顶部轴的折线图:利用sec_axis()创建顶部轴,指定刻度位置和自定义标签:
ggplot(data = dd, aes(x = req)) +
  geom_line(aes(y = st), size = .8) +
  scale_x_continuous(
    # 主X轴刻度使用过滤后的有效位置
    breaks = fs_valid,
    # 顶部次要轴设置
    sec.axis = sec_axis(
      trans = ~.,  # 保持与主轴刻度位置完全对应
      breaks = fs_valid,
      labels = pers_valid,
      name = "自定义顶部轴"  # 可替换为实际轴标题
    )
  )
  1. 额外说明:
  • sec_axis()的trans参数定义次要轴与主轴的转换逻辑,这里因为标签是基于主轴刻度的倒数计算,直接用~.保持位置匹配即可。
  • 若需调整顶部轴的样式,可通过theme()中的axis.text.top、axis.title.top等参数修改字体、颜色、位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:10:25