mümkündür, ancak bazı kesmek gerektirir.
Her şeyden önce, pheatmap
'un bir ısı haritası çizdiğini görelim. Bunu konsolda pheatmap
yazarak ve çıkışta kaydırma yaparak veya alternatif olarak edit(pheatmap)
kullanarak kontrol edebilirsiniz.
Sen renkler
mat = scale_colours(mat, col = color, breaks = breaks)
scale_colours
fonksiyon pheatmap
paketin bir iç fonksiyonu gibi görünüyor kullanılarak eşlenir olduğunu göreceksiniz, ama biz verir kullanarak kaynak kodunu
getAnywhere(scale_colours)
kontrol edebilirsiniz
function (mat, col = rainbow(10), breaks = NA)
{
mat = as.matrix(mat)
return(matrix(scale_vec_colours(as.vector(mat), col = col,
breaks = breaks), nrow(mat), ncol(mat), dimnames = list(rownames(mat),
colnames(mat))))
}
Şimdi ihtiyacımız var scale_vec_colours
kontrol o çıkıyor:
function (x, col = rainbow(10), breaks = NA)
{
return(col[as.numeric(cut(x, breaks = breaks, include.lowest = T))])
}
Yani, aslında, pheatmap
cut
kullandığını Hangi renklerin karar vermek.
as.numeric(cut(c(1:100, NA, NA), seq(0, 100, 10)))
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3
[29] 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6
[57] 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9
[85] 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 NA NA
O NA verir:
deneyelim ve UA'lar etrafında varsa cut
ne görelim! Yani, işte sorunun!
Şimdi, bunun etrafından nasıl geçeceğiz? En kolay şey, pheatmap
'un ısı haritası çizmesine izin vermektir, ardından NA değerlerini istediğimiz gibi üst üste çizmektir.
Yani NA pozisyonlarına dikdörtgenler eklemek için grid.rect
kullanabilirsiniz: pheatmap
fonksiyonuna tekrar bakıldığında
bunu planlamaktan grid
paketini (R - How do I add lines and text to pheatmap? de bu soruya bakın) kullanır göreceksiniz. Yapacağım şey, deneme ve hata ile ısı haritası sınırının koordinatlarını bulmak, ardından dikdörtgenleri çizmek için oradan çalışmaktır. Örneğin
:
library(pheatmap)
m<- matrix(c(1:100), nrow= 10)
m[1,1]<- NA
m[10,10]<- NA
hmap <- pheatmap(m, cluster_rows=FALSE, cluster_cols=FALSE)
# These values were found by trial and error
# They WILL be different on your system and will vary when you change
# the size of the output, you may want to take that into account.
min.x <- 0.005
min.y <- 0.01
max.x <- 0.968
max.y <- 0.990
width <- 0.095
height <- 0.095
coord.x <- seq(min.x, max.x-width, length.out=ncol(m))
coord.y <- seq(max.y-height, min.y, length.out=nrow(m))
for (x in seq_along(coord.x))
{
for (y in seq_along(coord.y))
{
if (is.na(m[x,y]))
grid.rect(coord.x[x], coord.y[y], just=c("left", "bottom"),
width, height, gp = gpar(fill = "green"))
}
}
Daha iyi bir çözüm Eğer yoksa ...