2014-05-14 6 views
8

निम्नलिखित कोड द्वारा उत्पन्न साजिश में मैं रंगों को बदलना चाहता हूं ताकि सभी मान < 0.6 "कम" रंग और सभी मानों के समान हों 1 से अधिक "उच्च" रंग हैं।आर ggplot2 - मैं सीमाओं के मूल्यों से कैसे निर्दिष्ट कर सकता हूं 'रंग

जैसा कि डेटा ढाल डेटा की पूरी संख्यात्मक सीमा में फैला हुआ है। मैंने सीमा जोड़ने की कोशिश की है, लेकिन यह सभी सीमाओं को एनए मानों के समान रंग मानता है, जो कि मैं नहीं चाहता हूं क्योंकि मुझे स्पष्ट रूप से छूने के लिए एनए मानों की आवश्यकता है और सीमाओं के बाहर < 0.6 के समान रंग नहीं दिखाना चाहिए।

मुझे विश्वास है कि जवाब ओब के साथ है, तर्क तोड़ता है लेकिन इसे काम करने में कोई सफलता नहीं मिली है।

library(ggplot2) 
a = rnorm(17*17, 0.733,0.21) 
qcMat = matrix(a, ncol = 17) 
qcMat[qcMat> 1] = 1 
#qcMat contains values between 0 and 1 and some NAs 

m = melt(t(qcMat)) 
m$Var2 <- with(m,factor(Var2, levels = rev(sort(unique(Var2))))) 
ggplot(m, aes(as.factor(Var1), Var2, group=Var2)) + 
    geom_tile(aes(fill = value)) + 
    geom_text(aes(fill = m$value, label = round(m$value, 2))) + 
    scale_fill_gradient(low = "red", high = "green") + 
    xlab("") + ylab("") + ggtitle(paste("biscuit:", biscuit_id, "- QC", sep = " ")) 
+0

आप लिखना '1 से अधिक सभी मूल्यों "उच्च" रंग के होते हैं' और ' qcMat में 0 और 1 और कुछ एनएएस के बीच मान होते हैं। जब आपके डेटा में कोई 1 नहीं है तो सीमा 1 के रूप में क्यों उपयोग करें? – Henrik

+0

@ हेनरिक इस स्निपेट के उद्देश्य के लिए उत्पन्न डेटा वास्तविक डेटा का वास्तविक प्रतिबिंब नहीं है जिस पर मैं काम कर रहा हूं, लेकिन यह बहुत करीब है। DishMat को हटाने के लिए भी तय किया। – HoaxKey

उत्तर

14

आप के रूप में खुद ने कहा, आप scale_fill_gradient में oob तर्क चाहते हैं। मूल्यों क्लैंप के लिए, आप उपयोग कर सकते हैं squish from the scales package (जब ggplot2 स्थापित किया गया है scales स्थापित किया गया है):

library(scales) 

और बाद में

scale_fill_gradient(low = "red", high = "green", limits=c(0.6, 1), oob=squish) 
+0

शानदार! मैंने स्केल पैकेज लोड नहीं किया था, लेकिन मैंने इसके अलावा इस सटीक फिक्स की कोशिश की थी। तो करीब लेकिन सिगार नहीं। चीयर्स स्टीफन! – HoaxKey

+0

मुझे इस उदाहरण को समझ में नहीं आता है। यह कहां है कि आप मूल्यों के रंग को सीमा से बाहर निर्दिष्ट करते हैं? यह सिर्फ उन मानों को बनाता है जिन्हें NA के रूप में नहीं माना जाता है – GabrielMontenegro

0

नीचे करने के लिए geom_tile बदलने का प्रयास करें:

geom_tile(aes(fill = ifelse(value<0.6,min(m$value,na.rm=TRUE), 
           ifelse(value>1,max(m$value,na.rm=TRUE), 
            value)))) 

संपादित करें: तब न्यूनतम अधिकतम उपयोग नहीं करते हैं, तो हम 0.6-1 रेंज मिल जाएगा:

geom_tile(aes(fill = ifelse(value<0.6,0.6, 
          ifelse(value>1,1, 
            value)))) 
+0

धन्यवाद zx8754 यह निश्चित रूप से सही दिशा में एक कदम है, लेकिन बिल्कुल सही नहीं है, मैंने आपके प्रश्न को अद्यतन करने के लिए अद्यतन किया है ताकि आप इसे प्रस्तुत करने वाली नई समस्या का सुझाव दे और स्पष्ट कर सकें। चीयर्स! – HoaxKey

+0

@HoaxKey ने उत्तर दिया अद्यतन। – zx8754

+0

अद्यतन प्रश्न। यह अभी भी करीब है, लेकिन बिल्कुल सही नहीं है। मैं वास्तव में आपकी मदद की सराहना करता हूं, मुझे नहीं लगता कि आप एक डोगेकोइन उपयोगकर्ता हैं जो मैं टिप सकता हूं? – HoaxKey

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