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

如何在ggplot绘制的富集条形图中添加展示q_value的次级x轴

解决方案

ggplot的次级连续坐标轴仅支持基于主坐标轴的线性变换,所以需要先通过缩放函数把q值的数值范围映射到NES的数值范围,才能实现两个变量的双轴展示。由于你使用了coord_flip(),原y轴(NES连续轴)翻转后会变为水平x轴,配置的次级轴会默认显示在顶部,完整实现代码如下:

首先加载依赖包并构造刻度转换函数:

library(tidyverse)
library(scales)

# 计算NES和q_value的数值范围,用于刻度映射
nes_minmax <- range(data$NES)
q_minmax <- range(data$q_value)

# q值转NES刻度的正向转换,用于映射q值点的位置
q_to_nes <- function(x) {
  rescale(x, to = nes_minmax, from = q_minmax)
}

# NES转q值的反向转换,用于生成次轴的刻度标签
nes_to_q <- function(x) {
  rescale(x, to = q_minmax, from = nes_minmax)
}

修改你的绘图代码如下:

ggplot(data, aes(reorder(Pathway, NES), NES, fill = Group)) + 
  geom_col() +
  # 可选:添加对应q值的点,更直观对应次轴刻度
  geom_point(aes(y = q_to_nes(q_value)), color = "#2c3e50", size = 2) +
  scale_y_continuous(
    # 配置次级坐标轴
    sec.axis = sec_axis(
      trans = nes_to_q,
      name = "q value"
    )
  ) +
  theme_classic() + 
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 8),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(face = "bold", size = 8),
    plot.title = element_text(hjust = 0.5),
    # 统一次轴标题格式
    axis.title.y.right = element_text(face = "bold", size = 12)
  ) + 
  labs(
    x = "Pathway", 
    y = "Normalized Enrichment Score",
    title = "2Gy_5f vs. 0Gy"
  ) + 
  coord_flip()

如果不需要显示q值对应的点,仅保留次级x轴,删除geom_point对应的代码行即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:04