2013-02-21 5 views
6

आर में, मैं आसानी से रंग रैंप उत्पन्न कर सकता हूं, उदाहरण के लिए colorRampPalette। निम्नलिखित, पांच रंगों के अनुक्रम का उत्पादन नीले रंग से लाल करने के लिए:मैं आर में संख्याओं से रंगों में मैपिंग कैसे उत्पन्न करूं?

> mypal <- colorRampPalette(c("blue", "red"))(5) 
> mypal 
[1] "#0000FF" "#3F00BF" "#7F007F" "#BF003F" "#FF0000" 

कैसे मैं आसानी से इस पैलेट पर संख्या का एक वेक्टर मैप कर सकते हैं? कहो, मैं इस तरह 0 और 10 के बीच के अंक का एक वेक्टर है,:

x <- c(1, 9, 8.5, 3, 3.4, 6.2) 

मैं एक समारोह चाहते हैं, कहते हैं कि map2color, ऐसा है कि जब मैं map2color(mypal, x) चलाने के लिए, मैं

#0000FF, #FF0000, #FF0000, #3F00BF, #3F00BF, #BF003F 

मैं आमतौर पर निम्नलिखित

mypalette[ findInterval(x, seq(0, 10, length.out= 6), rightmost.closed= T) ] 

की तरह कुछ है, लेकिन हो सकता है वहाँ एक बेहतर समाधान OOB है, स्वचालित रूप से एक अंकीय वेक्टर के लिए एक रंग पैमाने पैदा होता है।

+0

आपको एचसीएल रंगक्षेत्र में और अधिक भाग्य हो सकता है और चमकदारता बदल सकती है, '? एचसीएल' – James

उत्तर

4

मेरे colourscheme पैकेज की कोशिश कर सकते है कि:

https://r-forge.r-project.org/projects/colourscheme/

अपने प्राथमिक उद्देश्य कार्यों कि संख्यात्मक मान (केवल पूर्णांक रंग संख्या के नक्शे बनाने के लिए है) रंगों के लिए। एक बार जब आप इसे इंस्टॉल कर लेंगे तो विगनेट सबसे अच्छा दस्तावेज है।

+0

के मामले में सभी संख्याओं को अलग करना चाहते हैं दिलचस्प लगता है! क्या मैं पूछ सकता हूं कि आपने इसे सीआरएएन में क्यों जमा नहीं किया? (मैं इसे install.packages के साथ स्थापित नहीं कर सकता, svn का उपयोग करना था) – January

+0

यह एक बहुत ही त्वरित विज्ञापन-प्रसार हैक, दस्तावेज़ीकरण थोड़ा कचरा है, और मुझे उम्मीद थी कि यह कुछ गति और उपयोग एकत्र कर सकता है - लेकिन यह कभी नहीं किया था... – Spacedman

+0

हाँ, लेकिन मैं इसे एक के लिए नहीं मिला और नहीं मिला, क्योंकि यह CRAN पर नहीं था :-) – January

4

आप पर आर-फोर्ज

> colorRampPalette(c('blue', 'red'))(length(x))[rank(x)] 
[1] "#0000FF" "#FF0000" "#CC0032" "#3300CC" "#660099" "#990065" 
+0

देखें लेकिन यह ओपी परिणाम से अलग है, है ना? – agstudy

+2

नहीं, यह काम नहीं करेगा, करीबी संख्याओं में बहुत समान रंग होना चाहिए। सी (1, 2, 3, 200) ले लो; पहले तीन नंबरों को रंग स्केल की शुरुआत के करीब होना चाहिए, और रैंक का उपयोग करके 3 पहले से ही नीला हो जाएगा। – January

+0

यह जनवरी की समस्या का समाधान नहीं कर सकता है, लेकिन यह विभिन्न समस्याओं को हल करता है, मामला जहां आप 1,2,3 और 200 –

3

यहाँ एक map2color समारोह है:

map2color<-function(x,pal,limits=NULL){ 
    if(is.null(limits)) limits=range(x) 
    pal[findInterval(x,seq(limits[1],limits[2],length.out=length(pal)+1), all.inside=TRUE)] 
} 


map2color(0:11,rainbow(200),limits=c(1,10)) 
[1] "#FF0000FF" "#FF0000FF" "#FFA800FF" "#ADFF00FF" "#05FF00FF" "#00FFA3FF" 
[7] "#00ABFFFF" "#0003FFFF" "#A600FFFF" "#FF00B0FF" "#FF0008FF" "#FF0008FF" 
map2color(0:11,rainbow(200)) 
[1] "#FF0000FF" "#FF8A00FF" "#EBFF00FF" "#61FF00FF" "#00FF29FF" "#00FFB3FF" 
[7] "#00BAFFFF" "#0030FFFF" "#5900FFFF" "#E300FFFF" "#FF0091FF" "#FF0008FF" 


mypal <- colorRampPalette(c("blue", "red"))(5) 
x <- c(1, 9, 8.5, 3, 3.4, 6.2) 
map2color(x,mypal) 
"#0000FF" "#FF0000" "#FF0000" "#3F00BF" "#3F00BF" "#BF003F" 

मैं एक colorramp कि डेटा के विभिन्न नमूनों भर में लगातार हो जाएगा बनाने के लिए कुछ इस तरह की जरूरत है, तो मैं एक xlim पैरामीटर जोड़ा। आपके प्रश्न में findInterval फ़ंक्शन की अनुस्मारक के लिए धन्यवाद।

2

सरल बात की heat.colors या cm.colors

f <- function(x,n=10){ 
    heat.colors(n)[cut(x,n)] 
} 

तरह cut के साथ अपने चर x discretizing और उसके बाद सूचकांक करने के लिए परिणामी कारक उपयोग कर रहा है एक रंग पट्टियाँ में सोच सकते हैं रंग-पत्र की अधिक जानकारी के लिए ?heat.colors देखते हैं।

यह फ़ंक्शन आपको से n के आनुपातिक भिन्नता के x के अनुरूप रंग वेक्टर प्रदान करेगा।

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

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