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

如何在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绘制(更便于统一风格和对齐),具体步骤:

  1. 安装加载依赖包
install.packages(c("ggplot2", "patchwork", "dplyr"))
library(ggplot2)
library(patchwork)
library(dplyr)
  1. 绘制堆叠柱状图(微调确保基因顺序一致)
# 统一基因顺序,避免拼接时错位
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")
  1. 用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")
  1. 并排拼接图形
# 按3:1的宽度比例拼接,可根据需求调整
p_bar + p_heatmap + plot_layout(widths = c(3, 1))

这样就能实现两个图形的并排展示,且基因顺序完全对齐,风格统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:30:49