Я пытаюсь построить тепловую карту в 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
. Прямоугольники появляются в тепловой карте, но они не находятся в правильном положении. Я весь день царапаю голову, не найдя, что случилось.
Любые предложения?
Спасибо за ответ. Я отредактировал свое сообщение, чтобы добавить некоторую ясность в отношении используемых переменных и пакетов. По той причине, что я не понимаю, тепловая карта 2, похоже, меняет ориентацию тепловой карты, что смущает функцию makeRects. Когда я использую функцию heatmap, она работает (но у меня не могут быть варианты, которые я хочу) ... – user2617763
Вы пропустили запятую после 'Rowv = FALSE' (я представил для этого редактирование). Если вам вообще не нужна дендрограмма, вы должны установить 'dendrogram =" none "'. Если 'heatmap.2()' изменяет ориентацию, транспонируйте матрицы, которые вы им даете, 'mat1t = t (mat1)' и 'mat2t = t (mat2)', затем поставьте 'mat1t' и' mat2t' в ' heatmap.2() 'и' makeRects() 'в вашем коде. –
Я не хотел переносить свою основную матрицу, потому что мне нравилась ее ориентация. Я попытался переставить вторичную матрицу, но она тоже не работала. Наконец, я получил его, обратив вторичную матрицу: «rmat2 <- apply (mat2, 2, rev)», а затем транспонировав его: 'trmat2 <- t (rmat2)'. Он, наконец, получил все в правильном порядке, хотя я не уверен, как и почему ... – user2617763