Ggplot2 डिफ़ॉल्ट रंग पैलेट का अनुकरण करें


191

वांछित संख्या में रंगों के लिए ggplot2 के डिफ़ॉल्ट रंग पैलेट का अनुकरण करने के लिए मैं किस फ़ंक्शन का उपयोग कर सकता हूं। उदाहरण के लिए, 3 का इनपुट इन रंगों के साथ हेक्स रंगों के एक चरित्र वेक्टर का उत्पादन करेगा: यहां छवि विवरण दर्ज करें


10
तराजू पैकेज देखें
हैडले

2
हाँ! मैं display.brewer.all()अपने डेस्क पर एक प्रिंटआउट रखता हूं। मुझे लगता है कि मुझे कारकों के लिए सेट 1 सबसे अच्छा लगता है।
जॉन कोल्बी

अच्छा विचार! मैं एक ही प्रिंटआउट बनाने जा रहा हूं। सेट 1 पर सहमत, मैंने पहले ही अपने अधिकांश नए चार्टों में इसका उपयोग कर लिया है।
SFun28

जवाबों:


264

यह रंग पहिया के चारों ओर समान रूप से फैला हुआ है, जो 15 से शुरू होता है:

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

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

n = 4
cols = gg_color_hue(n)

dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)

यहां छवि विवरण दर्ज करें


2
+1, मुझे आपका अच्छा, सरल समाधान पसंद है, हालाँकि मैं अभी भी यह समझने की कोशिश कर रहा हूँ कि आपके पास क्यों length=n+1है seq, जबकि मेरे पास हैlength=n
Andrie

18
क्योंकि 0 == 360
हैडले

129

यह से परिणाम है

library(scales)
show_col(hue_pal()(4))

चार रंग ggplot

show_col(hue_pal()(3))

तीन रंग ggplot


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

1
शायद यह एक ब्राउज़र बात है?
क्लेम्ब्स_लिका_स्पीकर

1
हां, बहुत अजीब। फ़ायरफ़ॉक्स में, हरा रंग # 15ba3e है, क्रोमियम में यह # 00b83a है, और छवि को डाउनलोड करने और समर्पित छवि कार्यक्रम (Gwenview) में देखने के बाद यह # 00b839 है। केवल कोनिकोर इसे # 00ba38 के रूप में सही ढंग से दिखाता है। तो केवल एक ही सही है, और कोई भी सुसंगत नहीं है!
स्पार्कहॉक

1
क्या रंग का नाम पाने का कोई तरीका है, जैसे 'red2', 'blue3 "? रंग कोड, जैसे # 00b83a, का उपयोग करना मुश्किल है।
सिओ जियांग

2
हेक्स मान कॉपी और पेस्ट करने में आसानी के लिए हैं: # f8766d - लाल # 00ba38 - हरा # 83b0fc - नीला
pluke

62

ये उत्तर सभी बहुत अच्छे हैं, लेकिन मैं एक और बात साझा करना चाहता था जिसे मैंने स्टैकओवरफ्लो पर खोजा था जो वास्तव में काफी उपयोगी है, यहां प्रत्यक्ष लिंक है

मूल रूप से, @DidzisElferts से पता चलता है कि आप सभी रंग, निर्देशांक आदि कैसे प्राप्त कर सकते हैं जो आपके द्वारा बनाए गए प्लॉट को बनाने के लिए ggplot का उपयोग करता है। बहुत अच्छा!

p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
ggplot_build(p)$data
[[1]]
     fill  y count x ndensity ncount  density PANEL group ymin ymax xmin xmax
1 #F8766D  5     5 1        1      1 1.111111     1     1    0    5 0.55 1.45
2 #C49A00 47    47 2        1      1 1.111111     1     2    0   47 1.55 2.45
3 #53B400 41    41 3        1      1 1.111111     1     3    0   41 2.55 3.45
4 #00C094 11    11 4        1      1 1.111111     1     4    0   11 3.55 4.45
5 #00B6EB 33    33 5        1      1 1.111111     1     5    0   33 4.55 5.45
6 #A58AFF 35    35 6        1      1 1.111111     1     6    0   35 5.55 6.45
7 #FB61D7 62    62 7        1      1 1.111111     1     7    0   62 6.55 7.45

45

हेडली विकम द्वारा ggplot2 पुस्तक के पृष्ठ 106 से:

डिफ़ॉल्ट रंग योजना, scale_colour_hue एचसीएल रंग पहिया के आसपास समान रूप से स्थानिक रूप से चुनती है।

थोड़ा रिवर्स इंजीनियरिंग के साथ आप इस फ़ंक्शन का निर्माण कर सकते हैं:

ggplotColours <- function(n = 6, h = c(0, 360) + 15){
  if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n
  hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}

इसको बारप्लॉट में प्रदर्शित करना:

y <- 1:3
barplot(y, col = ggplotColours(n = 3))

यहां छवि विवरण दर्ज करें


2
यह इससे भी सरल है। आप बीजगणित की पहली पंक्ति से बच सकते हैं, हालांकि यह मदद में नहीं है, hclमूल्यों को पुन: चक्रित करता है> 360.
जॉन कोल्बी

13
तुम भी scales:::show_col(ggplotColours(n=3))रंग और मूल्यों को प्रदर्शित करने के लिए उपयोग कर सकते हैं
स्टेट-आर

हालाँकि मुझे अभी तक पता नहीं चला है कि कैसे तराजू और उसके शो_कोल को बाहर लाने के लिए (हेक्स या अन्य किसी भी प्रारूप में) यह भूखंडों को महत्व देता है ...
स्टेफानो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.