突出显示热图中的单元格

2023-11-29

我目前正在尝试根据其他两个矩阵设置矩阵的热图并突出显示特定的单元格。

一个例子:

> SOI
         NAP_G021 NAP_G033  NAP_G039 NAP_G120  NAP_G122
2315101  59.69418 27.26002  69.94698 35.22521  38.63995
2315102 104.15294 76.70379 114.72999 97.35930  79.46014
2315104 164.32822 61.83898 140.99388 63.25482 105.48041
2315105  32.15792 21.03730  26.89965 36.25943  40.46321
2315103  74.67434 82.49875 133.89709 93.17211  35.53019

> above150

         NAP_G021 NAP_G033  NAP_G039 NAP_G120  NAP_G122
2315101  0 0 0 0 0
2315102  0 0 0 0 0
2315104  1 0 0 0 0
2315105  0 0 0 0 0
2315103  0 0 0 0 0

> below30

         NAP_G021 NAP_G033  NAP_G039 NAP_G120  NAP_G122
2315101  0 1 0 0 0
2315102  0 0 0 0 0
2315104  0 0 0 0 0
2315105  0 1 1 0 0
2315103  0 0 0 0 0

现在我创建一个普通的热图:

heatmap(t(SOI), Rowv = NA, Colv = NA)

现在我想做的是突出显示具有 1 的单元格above150具有一种颜色的框架(例如蓝色),而具有 1 英寸的单元格below30应该得到一个红框。当然,所有矩阵的大小都相等,因为它们是相关的。我知道我可以在通过 add.expr 处理后将内容添加到热图中,但到目前为止,我只是设法创建了跨越整个热图的完整 ablines => 不是我想要的。

如果有人有任何建议,我会很高兴。


当调用 add.expr 时,将设置绘图以使单元格的中心位于单位整数值处。尝试 add.expr=points(1:5,1:5) 看看。现在您需要做的就是编写一个函数,在半整数坐标处用您需要的颜色绘制方框 (help(rect))。

尝试这个:

set.seed(310366)

nx=5
ny=6
SOI=matrix(rnorm(nx*ny,100,50),nx,ny)

colnames(SOI)=paste("NAP_G0",sort(as.integer(runif(ny,10,99))),sep="")
rownames(SOI)=sample(2315101:(2315101+nx-1))
above150 = SOI>150
below30=SOI<30

makeRects <- function(tfMat,border){
  cAbove = expand.grid(1:nx,1:ny)[tfMat,]
  xl=cAbove[,1]-0.49
  yb=cAbove[,2]-0.49
  xr=cAbove[,1]+0.49
  yt=cAbove[,2]+0.49
  rect(xl,yb,xr,yt,border=border,lwd=3)
}

heatmap(t(SOI),Rowv = NA, Colv=NA, add.expr = {
 makeRects(above150,"red");makeRects(below30,"blue")})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突出显示热图中的单元格 的相关文章

随机推荐