4

現在、マトリックスのヒートマップを設定し、他の 2 つのマトリックスに基づいて特定のセルを強調表示しようとしています。

例:

> 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)

今、私がやりたいことは、1above150インチのセルが 1 つの色 (青など) のフレームで強調表示され、1 インチのセルbelow30は赤のフレームになるはずです。もちろん、すべての行列は関連しているため、同じサイズです。add.expr を介して処理した後にヒートマップに追加できることはわかっていますが、これまでのところ、ヒートマップ全体にまたがる完全な ablines を作成できました => 探しているものではありません。

誰か提案があれば、私は喜んでいます。

4

1 に答える 1

9

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")})
于 2011-11-02T12:32:18.727 に答える