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

如何在ggplot的geom_tile上方为X轴标签添加Combined Score条形图?

解决enrichR Clustergram复刻中条形图角度与标签对齐问题

你在复刻enrichR的Clustergram时,上方对应Combined Score的条形图存在角度和标签对齐问题,以下是修正后的代码及关键调整说明:

修正后的完整代码

library(ggplot2)
library(patchwork)    

# 原始数据保持不变
gene.dat = data.frame(Term = c(rep("Diseases Of Base Excision Repair", 7), rep("HDR Thru Homologous Recombination (HRR)", 7)),
                      Genes = c(rep(c("A", "B", "C", "D", "E", "F", "G"), 2)),
                      n = c(NA, 1, NA, NA, 1, 1, 1, 
                            1, NA, 1, 1, NA, NA, 1))
scores.dat = data.frame(Term = c("HDR Thru Homologous Recombination (HRR)", "Diseases Of Base Excision Repair"),
                        Combined.Score = c(5329, 2738))

# 确保两个数据集的Term顺序一致,避免错位
gene.dat$Term = factor(gene.dat$Term, levels = scores.dat$Term)
scores.dat$Term = factor(scores.dat$Term, levels = scores.dat$Term)

main.plot = ggplot(gene.dat, aes(Term, Genes)) +
  geom_tile(aes(fill = n))+
  theme(
    plot.title = element_text(hjust = 1), 
    axis.text.x = element_blank(),
    legend.position="none",
    panel.background = element_blank()) + 
  ylab("") + xlab("")  + 
  scale_x_discrete(position = "top") +
  scale_fill_manual(values = c("1" = "darkblue", NA = "white")) # 补充填充色,让热图更清晰

score.plot = ggplot(scores.dat, aes(x = Combined.Score, y = Term)) + 
  geom_col(fill = "darkred") + # 横向条形图,对应热图的X轴方向
  geom_text(aes(label = Term), angle = 0, hjust = 1, vjust = 0.5, nudge_x = -100, color = "black") + # 标签水平放置,对齐条形图右侧
  scale_x_reverse() + # 反转X轴,让条形图从右往左延伸,对应热图的X轴顺序
  theme_void() +
  theme(axis.text.y = element_blank()) # 去掉原始Y轴标签,避免重复

# 组合两个图,确保高度比例和对齐
Y <- (score.plot + main.plot) + 
  plot_layout(ncol = 1, nrow = 2, heights = c(1, 3), align = "h") # 水平对齐,保证Term位置完全匹配
print(Y)

关键调整说明

  • 统一Term顺序:将两个数据集的Term转为因子并指定相同层级,避免热图和条形图的分类错位
  • 横向条形图转换:把score.plot的坐标轴从(Term, Combined.Score)改为(Combined.Score, Term),生成横向条形图,对应热图的X轴方向
  • 标签对齐优化:调整geom_text的参数,让Term标签水平放置在条形图右侧,通过nudge_x微调位置,确保和热图的X轴位置精准对应
  • 反转X轴:用scale_x_reverse()让条形图从右往左延伸,和热图的X轴顺序保持一致
  • 水平对齐布局:添加align = "h"确保两个图的水平方向完全对齐,消除错位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:13:10