2014-09-19 17 views
8

के लिए रंग आर पैकेज पैकेज का उपयोग करके तापमैप आकर्षित करने के लिए। क्या इनपुट मैट्रिक्स में एनएएस को रंग असाइन करने का कोई तरीका है? ऐसा लगता है कि एनए डिफ़ॉल्ट रूप से सफेद रंग में रंगीन हो जाता है। उदा .:फीटमैप: एनए

library(pheatmap) 
m<- matrix(c(1:100), nrow= 10) 
m[1,1]<- NA 
m[10,10]<- NA 
pheatmap(m, cluster_rows=FALSE, cluster_cols=FALSE) 

धन्यवाद

उत्तर

10

यह संभव है, लेकिन कुछ हैकिंग की आवश्यकता है।

सबसे पहले देखते हैं कि कैसे pheatmap एक हीटमैप खींचता है। आप कंसोल में pheatmap टाइप करके और आउटपुट के माध्यम से स्क्रॉल करके या वैकल्पिक रूप से edit(pheatmap) का उपयोग करके जांच सकते हैं।

आप पाएंगे कि रंगों का उपयोग

mat = scale_colours(mat, col = color, breaks = breaks) 

scale_colours समारोह pheatmap पैकेज का एक आंतरिक समारोह हो रहा है मैप की जाती हैं, लेकिन हम कौन देता है स्रोत का उपयोग

getAnywhere(scale_colours) 

कोड की जांच कर सकते

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

अब हमें इसकी आवश्यकता है जाँच scale_vec_colours, कि पता चला है होना करने के लिए:

function (x, col = rainbow(10), breaks = NA) 
{ 
    return(col[as.numeric(cut(x, breaks = breaks, include.lowest = T))]) 
} 

तो, अनिवार्य रूप से, pheatmapcut उपयोग कर रहा है जो रंगों का उपयोग करने के लिए तय करने के लिए।

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 

यह लागू नहीं देता:

की कोशिश करते हैं और अगर वहाँ NAS के आसपास रहे हैं देखो क्या cut करता है! तो, आपका मुद्दा यहाँ है!

अब, हम इसके आसपास कैसे हो सकते हैं? सबसे आसान बात यह है कि pheatmap को तापमैप खींचने दें, फिर एनए वैल्यू को जितना चाहें उतना ओवरलैट करें।

तो तुम grid.rect उपयोग कर सकते हैं एनए पदों के लिए आयतों को जोड़ने के लिए:

pheatmap समारोह में फिर से देख रहे हैं आप इसे साजिश रचने के लिए grid पैकेज (R - How do I add lines and text to pheatmap? भी इस सवाल देखें) का उपयोग करता है देखेंगे। मैं क्या करूँगा परीक्षण और त्रुटि द्वारा हीटमैप सीमा के निर्देशांक पाएं, फिर वहां से आयताकारों को साजिश करने के लिए वहां से काम करें।

उदाहरण के लिए:

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

एक बेहतर समाधान ऐसा न करने पर pheatmap का कोड edit फंक्शन का उपयोग करके हैक और यह NAS से निपटने के रूप में आप चाहते हैं के लिए ...

1

होगा का उपयोग gplots से करें, इसके बजाय na.color तर्क सुविधाजनक है।m ऊपर से उदाहरण डेटा ले रहा है:

library(gplots) 
heatmap.2(m, Rowv = F, Colv = F, trace = "none", na.color = "Green") 
2

आप github से pheatmap के डेवलपर संस्करण का उपयोग करके एक रंग बताए सक्षम कर सकते हैं। आप इस DevTools उपयोग कर सकते हैं:

#this part loads the dev pheatmap package from github 
if (!require("devtools")) { 
    install.packages("devtools", dependencies = TRUE) 
    library(devtools) 
} 
install_github("raivokolde/pheatmap") 

अब आप pheatmap समारोह में पैरामीटर "na_col" का उपयोग कर सकते हैं:

pheatmap(..., na_col = "grey", ...) 

(संपादित) मत भूलना यह बाद में लोड करने के लिए। एक बार यह स्थापित हो जाने के बाद, आप इसे किसी अन्य स्थापित पैकेज के रूप में देख सकते हैं।

0

यदि आप एनएएस ग्रे होना चाहते हैं, तो आप बस "एनए" को डबल के रूप में मजबूर कर सकते हैं।

m[is.na(m)] <- as.double("NA") 
pheatmap(m, cluster_rows=F, cluster_cols=F) 
संबंधित मुद्दे