2012-06-11 22 views
21

मैं ggplot2 में एक हीटमैप बनाना चाहता हूं। मेरे खिलौना डेटा और कोड है:ggplot2 रेंज वाले मानों के लिए रंगों के साथ हीटमैप

set.seed(12345) 
dat <- 
    data.frame(
     Row = rep(x = LETTERS[1:5], times = 10) 
    , Col = rep(x = LETTERS[1:10], each = 5) 
    , Y = rnorm(n = 50, mean = 0, sd = 1) 
    ) 
library(ggplot2) 
p <- ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y), colour = "white") + 
     scale_fill_gradient(low = "white", high = "steelblue") 
p 

मैं इस तरह लेकर मूल्यों के लिए रंग योजना करना चाहते हैं:

-3 <= Y < -2 ---> Dark Blue 
-2 <= Y < -1 ---> Blue 
-1 <= Y < 0 ---> Light Blue 
0 <= Y < 1 ---> Light Green 
1 <= Y < 2 ---> Green 
2 <= Y <= 3 ---> Dark Green 

किसी भी मदद अत्यधिक सराहना की जाएगी। धन्यवाद

उत्तर

15

आपके पास इस तरह के कुछ के लिए कई विकल्प हैं, लेकिन यहां एक प्रारंभिक बिंदु है।

सबसे पहले, उचित सीमाओं के साथ Y से एक कारक बनाने के लिए cut का उपयोग करें:

ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y1), colour = "white") + 
     scale_fill_brewer(palette = "PRGn") 

enter image description here

यह रंग:

dat$Y1 <- cut(dat$Y,breaks = c(-Inf,-3:3,Inf),right = FALSE) 

फिर से एक पट्टिका का उपयोग RColorBrewer साजिश योजना कम अंत में नीले रंग की तुलना में अधिक बैंगनी है, लेकिन यह सी है सबसे कम मैं ब्रूवर पैलेट के बीच मिल सकता है।

यदि आप अपना खुद का निर्माण करना चाहते हैं, तो आप बस scale_fill_manual का उपयोग कर सकते हैं और values तर्क के लिए रंगों के वांछित वेक्टर निर्दिष्ट कर सकते हैं।

+0

धन्यवाद आपके उत्तर के लिए @joran। मुझे आश्चर्य है कि भूखंडों के दो आयतों के बीच की रेखाओं को कैसे साफ़ किया जाए। धन्यवाद – MYaseen208

+0

@ MYaseen208 'geom_tile' में 'रंग =" पारदर्शी "सेट करें। – joran

+0

बहुत बहुत धन्यवाद @ joran। बहुत सराहना की। – MYaseen208

38

यह स्पष्ट नहीं है कि आप अलग रंग चाहते हैं या यदि आपके द्वारा सूचीबद्ध रंग Y की सीमा के साथ मार्कर हैं। मैं दोनों दिखाऊंगा। Joran रूप में परिभाषित करता

असतत रंग के लिए, Y1 का उपयोग

dat$Y1 <- cut(dat$Y,breaks = c(-Inf,-3:3,Inf),right = FALSE) 

तो फिर तुम विशिष्ट रंगों के साथ एक साजिश प्राप्त कर सकते हैं आप एक मैनुअल पैमाने

p <- ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y1)) + 
     scale_fill_manual(breaks=c("\[-Inf,-3)", "\[-3,-2)", "\[-2,-1)", 
           "\[-1,0)", "\[0,1)", "\[1,2)", 
           "\[2,3)", "\[3, Inf)"), 
         values = c("white", "darkblue", "blue", 
            "lightblue", "lightgreen", "green", 
            "darkgreen", "white")) 
p 

मैं का उपयोग कर सूची यह नहीं पता था कि आप 3 और 3 से अधिक रंगों के लिए क्या चाहते थे, इसलिए मैंने सफेद इस्तेमाल किया।

यदि आप निरंतर रंग चाहते थे, तो scale_fill_gradient2 सकारात्मक पर 0 से हरे रंग के सफेद पर नीले रंग से नीले रंग से निकलने पर काम करेगा।

ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y)) + 
    scale_fill_gradient2(low="darkblue", high="darkgreen", guide="colorbar") 

enter image description here

आप रंग के सूक्ष्म विवरणों के नियंत्रण चाहते हैं, ऐसा है कि मानचित्रण "darkblue" 3 में 1 पर है, "नीले" 2 में, "lightblue", "सफेद" 0 पर, आदि, तो scale_fill_gradientn आप के लिए काम करेंगे:

library("scales") 
ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y)) + 
    scale_fill_gradientn(colours=c("darkblue", "blue", "lightblue", 
           "white", 
           "lightgreen", "green", "darkgreen"), 
         values=rescale(c(-3, -2, -1, 
             0, 
             1, 2, 3)), 
         guide="colorbar") 

+0

अच्छा उत्तर के लिए धन्यवाद @Brian। आप ggplot2 के जादूगर हैं।आपकी मदद की बहुत सराहना की। – MYaseen208

संबंधित मुद्दे