热图中的边界单元格

时间:2014-01-23 16:19:10

标签: r graph heatmap

我正在尝试使用相关矩阵和p值矩阵在R中构建热图。

我使用这个tutorial来构建热图而不会出现问题。它完美地运作。我甚至可以从右侧单元格中的第二个矩阵(p值矩阵)中引入一些值 但是,当我尝试突出显示相应的单元格时,它不起作用。我用这个code来生成边框。 我使用RStudio v0.97包gplots,RColorBrewer。 代码是:

library(gplots)
library(RColorBrewer)

my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 299)

nx = 5
ny = 10

mat1 <- matrix(rnorm(nx*ny,100,50),nx,ny)
mat2 <- mat1>150 #matrix used for the example instead of the p value matrix

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)
}            #this is the function to make the rectangles/borders
heatmap.2(mat1,
      Rowv = FALSE,         # don't reorganize columns 
      cellnote = mat2,      # check correspondance between rectangles and mat2 values
      main = "Correlation", # heat map title
      notecol="black",      # change font color of cell labels to black
      notecex=0.5,      # change the scaling of the cell labels
      density.info="none",  # turns off density plot inside color legend
      trace="none",         # turns off trace lines inside the heat map
      margins =c(12,9),     # widens margins around plot
      col=my_palette,       # use on color palette defined earlier 
      dendrogram="row",     # don't draw a row dendrogram
      Colv="NA",            # turn off column clustering
      add.expr = {makeRects(mat2,"black")}) #add the borders

我认为使用makeRects函数或通过heatmap.2函数重新排序行有问题。矩形出现在热图中,但它们不在正确的位置。我整天都在摸不着头脑而没有发现什么问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果您为人们提供了一些运行代码的示例数据,那将会很有帮助,您还应该指定运行代码所需的任何软件包。例如,

library(gplots)
library(Hmisc) 

x <- matrix(rnorm(100), ncol = 5)
y <- matrix(rnorm(100), ncol = 5)
keep <- rcorr(x, y)
matrr <- keep$r
matrp <- keep$P

makeRects()函数中,您引用了nxny,但它们从未定义过。

在致电heatmap.2()时,您引用matrl,但从未定义过。

如果您在问题中添加这三个对象的定义,我们可以解决您的绘图问题。