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

如何合并不同尺寸的ComplexHeatmap图?含报错排查与PDF导出方案

问题:合并不同尺寸ComplexHeatmap并导出PDF时出现报错

我有20个不同尺寸的ComplexHeatmap图需要合并到同一绘图中,尝试了以下代码:

h1 <- grid.grabExpr(draw(Heatmap(as.matrix(df_1[2:1692]), col = rev(rainbow(10)), name = "C1", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C")))

h2 <- grid.grabExpr(draw(Heatmap(as.matrix(df_2[2:2269]), col = rev(rainbow(10)), name = "C2", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C", use_raster = FALSE)))

h3 <- draw(Heatmap(as.matrix(df_3[2:1384]), col = rev(rainbow(10)), name = "C3", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C"))

plot_grid(h1,  plot_grid(h2, h3))

运行后出现错误:

Error in UseMethod("depth") :
no applicable method for 'depth' applied to an object of class "NULL"

我猜测是否没有直接合并不同尺寸ComplexHeatmap图的方法?请问将这些图合并后导出为PDF的最佳方案是什么?


解决方案

报错原因

你的代码中h3未使用grid.grabExpr()抓取,直接保留了draw()返回的Heatmap对象,与h1、h2的grob对象类型不匹配,导致plot_grid无法处理,触发报错。另外ComplexHeatmap基于grid绘图系统,直接混用ggplot2生态的plot_grid容易出现兼容性问题。

合并不同尺寸ComplexHeatmap的可行方案

方案1:使用grid包原生布局(推荐)

先将所有Heatmap转换为grob对象,再用grid.layout自定义布局组合:

library(grid)
library(ComplexHeatmap)

# 1. 批量生成所有20个图的grob对象
h_list <- list(
  grid.grabExpr(draw(Heatmap(as.matrix(df_1[2:1692]), col = rev(rainbow(10)), name = "C1", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C"))),
  grid.grabExpr(draw(Heatmap(as.matrix(df_2[2:2269]), col = rev(rainbow(10)), name = "C2", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C", use_raster = FALSE))),
  grid.grabExpr(draw(Heatmap(as.matrix(df_3[2:1384]), col = rev(rainbow(10)), name = "C3", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C")))
  # 依次添加剩余17个图的grabExpr代码
)

# 2. 定义布局:示例为4行5列,可按需调整行列数
layout <- grid.layout(nrow = 4, ncol = 5)

# 3. 组合并绘制所有图
grid.newpage()
pushViewport(viewport(layout = layout))
for (i in seq_along(h_list)) {
  row_pos <- (i - 1) %/% 5 + 1
  col_pos <- (i - 1) %% 5 + 1
  pushViewport(viewport(layout.pos.row = row_pos, layout.pos.col = col_pos))
  grid.draw(h_list[[i]])
  popViewport()
}
popViewport()

方案2:修正类型后使用cowplot的plot_grid

确保所有图均为grob对象,统一传入plot_grid指定行列布局:

library(cowplot)
library(ComplexHeatmap)
library(grid)

# 生成所有20个图的grob对象
h1 <- grid.grabExpr(draw(Heatmap(as.matrix(df_1[2:1692]), col = rev(rainbow(10)), name = "C1", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C")))
h2 <- grid.grabExpr(draw(Heatmap(as.matrix(df_2[2:2269]), col = rev(rainbow(10)), name = "C2", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C", use_raster = FALSE)))
h3 <- grid.grabExpr(draw(Heatmap(as.matrix(df_3[2:1384]), col = rev(rainbow(10)), name = "C3", cluster_columns = TRUE, cluster_rows = FALSE, show_column_names = FALSE, show_column_dend = FALSE, row_title = "G", column_title = "C")))
# 继续创建h4到h20...

# 合并为4行5列的组合图
combined_plot <- plot_grid(h1, h2, h3, h4, ..., h20, nrow = 4, ncol = 5)
print(combined_plot)

导出为PDF的最佳方式

方式1:适配grid原生布局的导出

pdf("combined_heatmaps.pdf", width = 20, height = 15) # 按需调整宽高
grid.newpage()
pushViewport(viewport(layout = layout))
for (i in seq_along(h_list)) {
  row_pos <- (i - 1) %/% 5 + 1
  col_pos <- (i - 1) %% 5 + 1
  pushViewport(viewport(layout.pos.row = row_pos, layout.pos.col = col_pos))
  grid.draw(h_list[[i]])
  popViewport()
}
popViewport()
dev.off()

方式2:适配cowplot组合图的导出

save_plot("combined_heatmaps.pdf", combined_plot, base_width = 20, base_height = 15)

注意:宽高参数需根据20个图的实际尺寸调整,避免图被截断或显示不全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:55:15