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

如何用R语言程序化组装对齐的X、Y及相关矩阵热图?

解决方案:用ComplexHeatmap实现多热图精准对齐布局

要实现X、COR、Y三个热图的对齐组装,且独立控制每个热图的参数,可通过ComplexHeatmap的自定义布局与对齐功能完成,具体步骤如下:

核心思路

通过布局矩阵指定三个热图的位置:

  • 转置后的X热图位于左上区域
  • COR相关矩阵热图位于右上区域(与X的行对齐,对应X变量)
  • Y热图位于左下区域(与X的列对齐对应样本,与COR的列对齐对应Y变量)
  • 右下区域留空

完整代码

set.seed(1)
X <- matrix(rnorm(3*6),
            nrow = 6,
            dimnames = list(samples = LETTERS[1:6],
                            xvar = paste0("X", 1:3)))

Y <- matrix(rnorm(4*6),
            nrow = 6,
            dimnames = list(samples = LETTERS[1:6],
                            yvar = paste0("Y", 1:4)))

COR <- cor(X,Y)

library(ComplexHeatmap)

# 独立定义每个热图,可自行设置颜色、标签等参数
h_X <- Heatmap(t(X),
               row_names_side = "left",
               cluster_rows = FALSE,
               cluster_columns = FALSE,
               name = "X", # 热图图例名称
               col = colorRamp2(c(-2, 0, 2), c("#2c7fb8", "#ffffff", "#d95f02"))) # 自定义X的颜色映射

h_COR <- Heatmap(COR,
                 column_names_side = "top",
                 cluster_rows = FALSE,
                 cluster_columns = FALSE,
                 name = "Correlation",
                 col = colorRamp2(c(-1, 0, 1), c("#67a9cf", "#f7f7f7", "#ef8a62"))) # 自定义相关矩阵的颜色映射

h_Y <- Heatmap(Y,
               cluster_rows = FALSE,
               cluster_columns = FALSE,
               name = "Y",
               col = colorRamp2(c(-2, 0, 2), c("#7570b3", "#ffffff", "#e7298a"))) # 自定义Y的颜色映射

# 定义布局矩阵:2行2列,1=X,2=COR,3=Y,0=空白区域
layout_matrix <- matrix(c(1, 2, 3, 0), nrow = 2, ncol = 2, byrow = TRUE)

# 绘制组合热图并设置对齐规则
draw(h_X + h_COR + h_Y, 
     layout_matrix = layout_matrix,
     # 指定对齐关系:
     align_heatmap_ht_list = list(
       c(1, 2), # X的行与COR的行对齐(X变量)
       c(1, 3), # X的列与Y的行对齐(样本)
       c(2, 3)  # COR的列与Y的列对齐(Y变量)
     ),
     heatmap_legend_side = "right") # 图例统一放在右侧

关键说明

  • 每个热图可独立设置col(颜色映射)、name(图例名称)、row_names_side(行标签位置)等参数,完全满足自定义需求
  • layout_matrix通过数字标记热图位置,0代表空白区域
  • align_heatmap_ht_list参数精准控制不同热图之间的行/列对齐,保证样本、变量的对应关系准确

其他包替代方案(pheatmap)

如果使用pheatmap,可通过grid包手动布局,但灵活性不如ComplexHeatmap:

library(pheatmap)
library(grid)

# 生成单个热图对象
p_X <- pheatmap(t(X), cluster_rows = FALSE, cluster_cols = FALSE, silent = TRUE)
p_COR <- pheatmap(COR, cluster_rows = FALSE, cluster_cols = FALSE, silent = TRUE)
p_Y <- pheatmap(Y, cluster_rows = FALSE, cluster_cols = FALSE, silent = TRUE)

# 打开新绘图设备
grid.newpage()

# 定义视口布局
pushViewport(viewport(layout = grid.layout(2, 2, widths = unit(c(3,2), "null"), heights = unit(c(2,3), "null"))))

# 将每个热图放入对应视口
pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
grid.draw(p_X$gtable)
popViewport()

pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
grid.draw(p_COR$gtable)
popViewport()

pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 1))
grid.draw(p_Y$gtable)
popViewport()

注:pheatmap的手动布局需要自行调整视口的宽高比例,对齐精度略逊于ComplexHeatmap。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:25:20