2013-02-28 10 views
21

मैं ध्यान दें कि यहां Box and whiskers plot कॉल:ggplot कारक रंग बदल रहा है?

p + geom_boxplot(aes(fill = factor(cyl))) 

उत्पन्न करता है चमकदार लाल/हरी/नीले boxplots के लिए रंग, भरने, जबकि:

p + geom_boxplot(aes(fill = factor(vs))) 

उत्पन्न करता है एक विशिष्ट पीला हरी/रंग की लाल। मेरे डेटा में, मैं रंग के दूसरे सेट मिलता है, लेकिन जैसे पहला सेट (चाहते हैं

p + geom_boxplot(aes(fill = factor(cyl))) 

क्या नियंत्रित करता है रंग का सेट जो ggplot का उपयोग करता है और आप इसे कैसे बदल सकते हैं?

धन्यवाद

में

उत्तर

29

डिफ़ॉल्ट रंग समान रूप से रंग चक्र के चारों ओर रंग स्थान दिया गया है आप देख सकते हैं कि यह कैसे here से उत्पन्न होता है

आप उन रंगों के साथ scale_fill_manual उपयोग कर सकते हैं:।।

p + scale_fill_manual(values=c("#F8766D", "#00BA38")) 

यहां, मैंने रंग प्राप्त करने के लिए cyl से ggplot_build(p)$data का उपयोग किया।

वैकल्पिक रूप से, तुम इतनी तरह के रूप में अच्छी तरह से एक और पैलेट उपयोग कर सकते हैं:

p + scale_fill_brewer(palette="Set1") 

और पैलेट में रंग लगाने के लिए, आप कर सकते हैं:

require(RColorBrewer) 
brewer.pal(9, "Set1") 

चेक पैकेज पट्टियाँ जानने के लिए और यदि आप रुचि रखते हैं तो अन्य विकल्प।

संपादित करें: @ user248237dfsf, जैसा कि मैंने पहले से ही बाहर शीर्ष पर लिंक में बताया, @Andrie से इस समारोह से पता चलता रंग उत्पन्न:

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) 
} 

> ggplotColours(2) 
# [1] "#F8766D" "#00BFC4" 

> ggplotColours(3) 
# [1] "#F8766D" "#00BA38" "#619CFF" 

आप उत्पन्न दो रंगों को देखें, तो , पहला एक जैसा है, लेकिन दूसरा रंग समान नहीं है, जब n = 2 और n = 3। ऐसा इसलिए है क्योंकि यह के रंगों को समान रूप से रंगों के समान बनाता है। यदि आप cyl के लिए vs के लिए रंगों का उपयोग करना चाहते हैं तो आपको scale_fill_manual सेट करना होगा और इस फ़ंक्शन से n = 3 के साथ उत्पन्न इन रंगों का उपयोग करना होगा।

सत्यापित करने के लिए कि यह वास्तव में है क्या तुम कर सकते हो हो रहा है:

p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(cyl))) 

p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(vs))) 

अब, अगर आप कार्य करें:

ggplot_build(p1)$data[[1]]$fill 
# [1] "#F8766D" "#00BA38" "#619CFF" 

ggplot_build(p2)$data[[1]]$fill 
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D" 

आप देखते हैं कि इन रंगों कि ggplotColours और उपयोग करते हुए उत्पन्न कर रहे हैं अंतर के कारण भी स्पष्ट है। आशा है कि ये आपकी मदद करेगा।

+2

लेकिन उस की व्याख्या नहीं करता क्यों एक चर के लिए एक कारक के रूप में साजिश रची आप रंग का एक सेट हो जाते हैं और अलग से एक के लिए आप की तरह रंग का एक और सेट प्राप्त दस्तावेज़ पृष्ठ मैं से जुड़ा हुआ है। रंग समान रूप से दूरी पर हैं, मैं इसे देख सकता हूं, लेकिन दोनों के बीच यह अलग क्यों है? मैं इसे पहले की तरह दिखाना चाहता हूं। – user248237dfsf

+0

ह्यू व्हील पर प्रत्येक रंग के बीच मैन्युअल रूप से चरणों को सेट करने में सक्षम होना अच्छा होगा। इस तरह हम लगातार कारकों के बीच एक बड़ा अंतर प्राप्त कर सकते हैं। 360 के बाद इसे सिर्फ 0 से जारी रखना चाहिए। – JohannesNE

5

पिछले जवाब को जोड़ना:

col सौंदर्य (fill के बजाय) का उपयोग कर, scale_color_manual का उपयोग करें।यह geom_point() के लिए उपयोगी है:

myColors <- c("#56ddc5", "#ff3db7", "#4699dd") 
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
    geom_point() + 
    scale_color_manual(values=myColors) 

enter image description here

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