如何合并pheatmap热图与GOplot条形图?ggarrange合并失败求助
解决pheatmap热图与GOplot条形图合并时热图空白的问题
问题原因
pheatmap生成的热图属于grid包的grob图形对象,而非标准ggplot对象,而ggarrange默认仅支持渲染ggplot类对象,直接传入会导致热图区域无法正常显示。
解决方法
方法1:将pheatmap转换为ggplot兼容对象
使用ggplotify包将pheatmap的grob对象转换为ggplot类,再用ggarrange合并:
library(pheatmap) library(GOplot) library(ggpubr) library(ggplotify) # 生成热图并转换格式 heatmap_a <- pheatmap(your_data_matrix) heatmap_a_ggplot <- as.ggplot(heatmap_a$gtable) # 生成GO富集条形图 go_bar_b <- GOBar(your_go_enrichment_data) # 合并图形 ggarrange(heatmap_a_ggplot, go_bar_b, ncol = 2, nrow = 1)
方法2:直接使用gridExtra合并grob对象
将GOplot的ggplot条形图转为grob后,用grid.arrange直接合并两个grob:
library(gridExtra) library(ggplot2) # 把GO条形图转为grob格式 go_bar_b_grob <- ggplotGrob(go_bar_b) # 合并热图grob和条形图grob grid.arrange(heatmap_a$gtable, go_bar_b_grob, ncol = 2)
方法3:使用patchwork包拼接(推荐)
patchwork支持直接兼容ggplot和grid对象,语法更简洁:
library(patchwork) # 直接拼接两个图形 heatmap_a_ggplot + go_bar_b + plot_layout(ncol = 2)
内容的提问来源于stack exchange,提问作者user2110417
相关产品推荐
相关产品推荐

