如何在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
相关产品推荐
相关产品推荐

