如何在R语言中将堆叠柱状图与热图整合并排展示?
堆叠柱状图与热图并排展示实现方案
我有两个图形:一个堆叠柱状图和一个热图,希望将它们整合在一起并排展示。感谢您提供任何帮助。以下是我的代码:
堆叠柱状图代码
df.bar <- data.frame(Gene.name=c('Gene1','Gene1','Gene1','Gene2','Gene2','Gene2','Gene3','Gene3','Gene3', 'Gene4','Gene4','Gene4'), Alteration.frequency=c(0.0909, 2.1838, 0.6369, 0.1819, 1.0919, 0.3639, 0.4549,0.7279, 0.7279, 0.000, 0.3639, 0.4549), Alteration.Type=c("Deep deletion", "Amplification", "Point mutation", "Deep deletion", "Amplification", "Point mutation", "Deep deletion", "Amplification" , "Point mutation", "Deep deletion", "Amplification" , "Point mutation")) library(ggplot2) ggplot(df.bar, aes(fill=factor(Alteration.Type, levels = c('Point mutation','Amplification','Deep deletion')), y=Alteration.frequency, x=Gene.name)) + geom_bar(position="stack", stat="identity")+theme_bw()+ theme(axis.text.x = element_text(size = 10, angle = 45, hjust = 1, colour = 'black'))+ scale_fill_manual(values=c("seagreen2", "maroon2",'deepskyblue3'))+ labs(fill = 'Alteration type')
[堆叠柱状图示例图]
热图代码
df.heatmap <- data.frame(Gene_name=c('Gene1','Gene2','Gene3','Gene4'), log2FC=c(0.56,-1.5,-0.8,2)) library(gplots) heatmap.2(cbind(df.heatmap$log2FC, df.heatmap$log2FC), trace="n", Colv = NA, dendrogram = "none", labCol = "", labRow = df$Gene_name, cexRow = 0.75, col=my_palette)
[热图示例图]
我需要实现类似目标示例图的效果。
解决方案
推荐用patchwork包实现ggplot图形的并排拼接,同时将热图转为ggplot绘制(更便于统一风格和对齐),具体步骤:
- 安装加载依赖包
install.packages(c("ggplot2", "patchwork", "dplyr")) library(ggplot2) library(patchwork) library(dplyr)
- 绘制堆叠柱状图(微调确保基因顺序一致)
# 统一基因顺序,避免拼接时错位 df.bar <- df.bar %>% mutate(Gene.name = factor(Gene.name, levels = c("Gene1", "Gene2", "Gene3", "Gene4"))) p_bar <- ggplot(df.bar, aes(fill=factor(Alteration.Type, levels = c('Point mutation','Amplification','Deep deletion')), y=Alteration.frequency, x=Gene.name)) + geom_bar(position="stack", stat="identity")+theme_bw()+ theme(axis.text.x = element_text(size = 10, angle = 45, hjust = 1, colour = 'black'), axis.title.x = element_blank())+ # 去掉x轴标题,避免重复显示 scale_fill_manual(values=c("seagreen2", "maroon2",'deepskyblue3'))+ labs(fill = 'Alteration type', y = "Alteration frequency")
- 用ggplot重构热图(替代gplots版本)
# 统一基因顺序 df.heatmap <- df.heatmap %>% mutate(Gene_name = factor(Gene_name, levels = c("Gene1", "Gene2", "Gene3", "Gene4"))) # 定义颜色渐变调色板 my_palette <- colorRampPalette(c("blue", "white", "red"))(100) p_heatmap <- ggplot(df.heatmap, aes(x = "log2FC", y = Gene_name, fill = log2FC)) + geom_tile(color = "white") + scale_fill_gradientn(colors = my_palette, limits = c(-2, 2)) + theme_bw() + theme(axis.text.y = element_blank(), # 隐藏热图y轴文本,避免与柱状图重复 axis.title.y = element_blank(), axis.text.x = element_text(size = 10)) + labs(x = "log2FC", fill = "log2FC")
- 并排拼接图形
# 按3:1的宽度比例拼接,可根据需求调整 p_bar + p_heatmap + plot_layout(widths = c(3, 1))
这样就能实现两个图形的并排展示,且基因顺序完全对齐,风格统一。
内容的提问来源于stack exchange,提问作者zahra abdi
相关产品推荐
相关产品推荐

