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

使用R的ComplexHeatmap绘制单框对应多行的热图技术求助

用ComplexHeatmap绘制每3行一个区块的热图

核心思路是通过**行分组(row_split)**把每3行数据归为一组,再调整热图的边框、组间距等参数,实现你要的区块效果。以下是可直接运行的示例代码:

步骤1:准备数据和加载包

library(ComplexHeatmap)
library(circlize)

# 构造模拟数据:15行(5个区块,每个区块3行),10列
set.seed(123)
mat = matrix(rnorm(15*10), nrow = 15)
# 定义分组:每3行一组,共5组
row_groups = rep(1:5, each = 3)

步骤2:绘制带区块的热图

Heatmap(
  mat,
  # 按预设的分组拆分行
  row_split = row_groups,
  # 给每个区块添加边框
  border = TRUE,
  # 设置组之间的行间距,区分不同区块
  row_gap = unit(5, "mm"),
  # 隐藏单个行的标签(如果不需要显示每行名称)
  show_row_names = FALSE,
  # 设置组标签的样式
  row_title_gp = gpar(fontsize = 12, fontface = "bold"),
  # 调整热图颜色映射
  col = colorRamp2(c(-2, 0, 2), c("blue", "white", "red")),
  # 图例参数
  heatmap_legend_param = list(title = "Value", direction = "horizontal")
)

关键参数说明

  • row_split:接受向量或因子,用来指定每行所属的组,这里用rep(1:5, each=3)实现每3行一组
  • border=TRUE:给每个分组区块添加边框,和你展示的图效果匹配
  • row_gap:控制不同组之间的间距,让区块划分更明显
  • 如果需要保留每行的标签,可把show_row_names设为TRUE,或者通过row_names_gp调整标签样式

进阶优化

如果想给每个区块添加额外注释(比如区块名称),可以用rowAnnotation:

# 给每个区块添加注释
row_anno = rowAnnotation(
  Block = row_groups,
  show_legend = FALSE,
  annotation_name_side = "left"
)

# 组合热图和注释
Heatmap(mat,
        row_split = row_groups,
        border = TRUE,
        row_gap = unit(5, "mm"),
        show_row_names = FALSE) + row_anno

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:16