使用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
相关产品推荐
相关产品推荐

