2014-01-23 4 views
1

Я пытаюсь построить тепловую карту в R с использованием матрицы корреляции и матрицы значений p.Пограничные ячейки в тепловой карте

Я использую этот 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. Прямоугольники появляются в тепловой карте, но они не находятся в правильном положении. Я весь день царапаю голову, не найдя, что случилось.

Любые предложения?

ответ

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() функции вы обратитесь к nx и ny, но они никогда не определены.

В своем запросе heatmap.2() вы ссылаетесь на matrl, но это никогда не определяется.

Если вы добавите определения для этих трех объектов в свой вопрос, мы сможем устранить проблему с графикой.

+0

Спасибо за ответ. Я отредактировал свое сообщение, чтобы добавить некоторую ясность в отношении используемых переменных и пакетов. По той причине, что я не понимаю, тепловая карта 2, похоже, меняет ориентацию тепловой карты, что смущает функцию makeRects. Когда я использую функцию heatmap, она работает (но у меня не могут быть варианты, которые я хочу) ... – user2617763

+0

Вы пропустили запятую после 'Rowv = FALSE' (я представил для этого редактирование). Если вам вообще не нужна дендрограмма, вы должны установить 'dendrogram =" none "'. Если 'heatmap.2()' изменяет ориентацию, транспонируйте матрицы, которые вы им даете, 'mat1t = t (mat1)' и 'mat2t = t (mat2)', затем поставьте 'mat1t' и' mat2t' в ' heatmap.2() 'и' makeRects() 'в вашем коде. –

+0

Я не хотел переносить свою основную матрицу, потому что мне нравилась ее ориентация. Я попытался переставить вторичную матрицу, но она тоже не работала. Наконец, я получил его, обратив вторичную матрицу: «rmat2 <- apply (mat2, 2, rev)», а затем транспонировав его: 'trmat2 <- t (rmat2)'. Он, наконец, получил все в правильном порядке, хотя я не уверен, как и почему ... – user2617763

Смежные вопросы