आर

2012-08-11 6 views
9

में एक कस्टम रंग पैलेट बनाएं मुझे पता है कि R स्वचालित रूप से कुछ रंग पट्टियाँ साथ भरी हुई है, इस तरह के रूप palette, rainbow, heat.colors और gray। मुझे RColorBrewer के बारे में भी पता है। लेकिन, अगर मैं एक कस्टम रंग पैलेट का उपयोग करना चाहता हूं और नाम से रंग असाइन करना चाहता हूं? क्या यह संभव है?आर

#1A73BA (R: 26 G: 115 B: 186) - this is a blue 
#FFDB43 (R:255 G:219 B:67) - this is a yellow 
#B54B05 (R:181 G:75 B:5) - this is an orange 

मेरी कंपनी का नाम के पहले अक्षर पर हैं:

मेरी कंपनी का रंग पैलेट इस प्रकार है।

मैं उन रंगों को हेक्स या आरजीबी के बजाय नाम के माध्यम से कॉल करने में सक्षम होना चाहता हूं क्योंकि मुझे उन्हें याद नहीं है। आदर्श रूप से, मैं एक ऐसी फाइल बना सकता हूं जो स्वचालित रूप से आर में लोड हो जाए जो इन रंगों को शुरू करेगी।

ATBlue <- #1A73BA 
ATYellow <- #FFDB43 
ATOrange <- #B54B05 

फिर, मैं रंग कह सकते हैं:

plot(x,y, col = "ATBlue") 

मैं एक dataframe में मूल्यों डाल सकता है, तो उन्हें इतनी तरह फोन:

ATColors <- data.frame(name = c("ATBlue", "ATYellow", "ATOrange"), color= c("#1A73BA", "#F7D364", "#B54B05")) 

plot(x,y, col = ATColors[3,2]) 

लेकिन मुझे पता है की आवश्यकता होगी इसे सही तरीके से कॉल करने के लिए डेटाफ्रेम में स्थान।

क्या मैं एक तत्व बना सकता हूं जो आर लॉन्च होने पर स्वचालित रूप से लोड हो जाएगा जो मुझे एक कस्टम रंग नाम को साजिश में कॉल करने की अनुमति देगा?

उत्तर

11

यह जवाब (या कम से कम करने के लिए एक संभावित जवाब है) आपकी टिप्पणियों और संपादन:

ATblue <- rgb(26/255, 115/255, 186/255, 1) 
ATyellow <- rgb(255/255, 219/255, 67/255, 1) 
ATorange <- rgb(181/255, 75/255, 5/255, 1) 

plot(1:10, col= c(ATblue, ATyellow, ATorange), pch=20) 

rgb साथ परिभाषा विधि इस प्रकार है कि यह समर्थन ग्राफिक उपकरणों पर पारदर्शिता के लिए अनुमति देता है, तो आप एक अल्फा स्तर सेट करने के लिए अनुमति देता है (कम से कम: 'पीडीएफ', 'विंडोज़', 'क्वार्ट्ज' और 'एक्स 11')।

plot(1,1) # to set up plot window 
abline(h=c(0.8,1,1.2), col= palvec[ c('ATblue', 'ATyellow', 'ATorange') ] , lwd=40) 

सामान्य तौर पर मुझे लगता है कि आपको लगता है कि मिल जाएगा:

तुम भी एक 'पैलेट-वेक्टर'

palvec <- c(ATblue=ATblue, ATyellow=ATyellow, ATorange=ATorange) 

वेक्टर या तो नंबर या नाम के साथ पहुँचा जा सकता है यही कारण है कि नाम कर सकते हैं यदि आप सभी निचले मामले का उपयोग करते हैं तो उस जीआईएफ-सूची के साथ आधार और ग्राफिक्स पैकेज (डिफ़ॉल्ट रूप से लोड किया गया है, इसलिए कोई नामकरण आवश्यक नहीं होगा) के लिए अच्छा पत्राचार होगा। तो यह पहले से ही आर का हिस्सा है। मान लीजिए कि आप "लैवेंडरब्लश" के आर रंग का नाम खोजना चाहते हैं। सौंपा रंग नामों में से वेक्टर रंग से दिया जाता है(), लेकिन यह नहीं बल्कि बड़ा है, तो आप इसे छीलना नीचे के साथ कर सकते हैं:

grep("lavender", colors(), ignore.case=TRUE, value=TRUE) 
#[1] "lavender"  "lavenderblush" "lavenderblush1" "lavenderblush2" 
#  "lavenderblush3" "lavenderblush4" 

और कहते हैं कि तुम को देखने के लिए कि क्या उस रंग के लिए हेक्स कोड के रूप में ही थे चाहता था आपकी अपठनीय gif तालिका में से एक:

ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb("lavenderblush"))) 
ccodes 
#[1] "fff0f5" 

हाँ।और अपने उदाहरण के लिए सिर्फ "SeaGreen" का उपयोग करें:

> ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb("seagreen"))) 
> ccodes 
[1] "2e8b57 

आप एक हेक्स-कोड मूल्य आप "#" इसे करने के लिए paste0 साथ संलग्न कर सकते हैं:

paste0("#", ccodes) 
#[1] "#2e8b57" 
plot(1,1, col=paste0("#", ccodes)) 

आप इस तरह का एक वेक्टर है, तो मूल्यों, paste0 भी vectorized है:

ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb(colors()[20:25]))) 
paste0("#", ccodes) 
#[1] "#ffe4c4" "#eed5b7" "#cdb79e" "#8b7d6b" "#000000" "#ffebcd" 
+0

मैं सवाल अद्यतन में थोड़ा और अधिक स्पष्ट होना। मैं सिर्फ एक उदाहरण के रूप में उस gif का उपयोग कर रहा था। आदर्श रूप में, मैं अपनी कंपनी के रंग लेता हूं और इसमें से एक पैलेट बना देता हूं, इसलिए यह 10 रंग या तो होगा, 200 नहीं या जो कुछ भी था। मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की, फिर साजिश फिर से बनाई। 'प्लॉट (एक्स, वाई, कोल =" सीकोड्स ") ', जो यह देता है:' plot.xy में त्रुटि (xy, type, ...): अमान्य रंग का नाम' ccodes''। यह हालांकि काम करता है: 'साजिश (एक्स, वाई, कोल =" # 2e8b57 ")'। क्या उस उदाहरण में सीकोड काम करने का कोई तरीका नहीं है? धन्यवाद – mikebmassey

+0

प्लॉट (x, y, col = "seagreen") के रूप में होगा। –

+0

'paste0 (" # ", ccodes) -> ccodes' तब आप इसे अपने प्लॉट कॉल में तब तक उपयोग कर सकते हैं जब तक आप उद्धरण ड्रॉप न करें:' plot (x, y, col = ccodes) ' – plannapus

2

मैं इस तरह के नाम पर रखा गया वेक्टर में रंग डाल दिया जाएगा:

ATcols <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 

फिर आप इस तरह नीले रंग के कह सकते हैं: ATcols["blue"]। ,

ATcolor(2:3) 
# yellow orange 
# "#FFDB43" "#B54B05" 

ATcolor("orange") 
# orange 
# "#B54B05" 

ATcolor(c("orange", "blue")) 
# orange  blue 
# "#B54B05" "#1A73BA" 

वैकल्पिक रूप से:

AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 
ATcolor <- function(color="blue") { 
     if (is.numeric(color)) AT_color_data[color] 
     else AT_color_data[tolower(color)] 
} 

यह आपको अपने रंग प्राप्त करने के लिए कुछ विकल्प देता है:

आप थोड़ा अधिक सजावटी होना चाहते हैं, तो आप एक नामित वेक्टर और एक समारोह बना सकते हैं यदि आप संख्यात्मक तर्क प्रदान करते समय rainbow जैसे अपना कार्य व्यवहार कर सकते हैं:

AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 
ATcolor <- function(color="blue") { 
     if (is.numeric(color)) AT_color_data[1:color[1]] 
     else AT_color_data[tolower(color)] 
} 

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

ATcolor(2) 
#  blue yellow 
# "#1A73BA" "#FFDB43" 
+1

पोस्ट करूंगा, क्या आप सिर्फ नामित वेक्टर का उपयोग नहीं कर सकते? तो आप कुछ 'unlist' कथन छोड़ सकते हैं, और केवल' ATcolor <- function (x) AT_color_data [x] '(मुझे लगता है) –

+0

अच्छा बिंदु का उपयोग करें। मैं संपादित करूंगा। – seancarmody

0
library("grDevices") 
plot(1:20,pch=20,col=col) 
col=colorRampPalette(c("white", "red"))(20) 
M <- matrix(runif(100),10,10) 
M[lower.tri(M)] <- NA 
image(M,col = col,frame=F,xaxt="n",yaxt="n")