如何在R中为热图某行添加矩形框并获取热图坐标轴范围
给stats::heatmap的指定行加矩形框的方法
要解决这个问题,核心是理清热图主体的坐标逻辑,以及原始数据行和热图显示行的对应关系:
保存热图返回结果
stats::heatmap会返回包含行/列排序索引的列表,这是定位目标行的关键。示例代码:set.seed(123) mat <- matrix(rnorm(25), nrow = 5, ncol = 5) # 绘制热图并保存返回对象 hm <- stats::heatmap(mat, Colv = NA, scale = "none")定位目标行在热图中的位置
热图默认会对行做聚类排序(Rowv=TRUE),原始数据的行在热图里的位置是排序后的顺序。用hm$rowInd可以拿到排序后的行索引,比如要框住原始矩阵的第3行:target_pos <- which(hm$rowInd == 3)如果不需要行聚类,直接设置
Rowv=NA,此时hm$rowInd就是1:5,目标行的位置就是它的行号本身。绘制矩形框
热图中每个单元格的宽度、高度都是1,列的左右边界是0.5到ncol(mat)+0.5,目标行的上下边界是target_pos±0.5。直接用rect绘制:rect(xleft = 0.5, xright = ncol(mat) + 0.5, ybottom = target_pos - 0.5, ytop = target_pos + 0.5, border = "red", lwd = 2) # lwd控制框线粗细验证坐标范围(可选)
如果想确认热图主体的实际坐标轴范围,可以切换到热图的绘图区域后查看par("usr"):# 切换到热图主体区域(默认是布局中的第2行第1列) par(mfg = c(2, 1)) # 查看当前区域的坐标范围 par("usr")
内容的提问来源于stack exchange,提问作者shaelebrown
相关产品推荐
相关产品推荐

