2012-04-10 14 views
8

में दो अलग-अलग scale_fill_manual सक्रिय कैसे हो सकता है यह प्रश्न ggplot2 में पृष्ठभूमि रंगों के बारे में मेरे से चलता है।मेरे पास ggplot कमांड

उत्तर से, अब मैं अपने प्लॉट में पृष्ठभूमि देने के लिए geom_rect का उपयोग करने में सक्षम हूं जिसमें पांच अलग-अलग रंग हैं। इसके शीर्ष पर मैं एक बरचार्ट प्लॉट करना चाहता हूं जो दो अलग-अलग रंगों का उपयोग करता है। मैं इन कार्यों में से प्रत्येक को अलग से कर सकता हूं, लेकिन जब मैं उन्हें scale_fill_manual आदेशों को संयोजित करने का प्रयास करता हूं।

यहाँ मैं क्या कोशिश कर रहा हूँ है:

scores = data.frame(category = 1:4, percentage = c(34,62,41,44), type = c("a","a","a","b")) 
rects <- data.frame(ystart = c(0,25,45,65,85), yend = c(25,45,65,85,100), col = letters[1:5]) 
labels = c("ER", "OP", "PAE", "Overall") 
medals = c("navy","goldenrod4","darkgrey","gold","cadetblue1") 

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, ymax = yend, fill=col), alpha = 0.3) + 
scale_fill_manual(values=medals) + 
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") + 
#scale_fill_manual(values = c("indianred1", "indianred4")) + 
scale_x_continuous(breaks = 1:4, labels = labels) 

लिखा है, यह बनाता है दो barchart रंग पहले दो पृष्ठभूमि रंग के रूप में ही। दूसरी scale_fill_manual कमांड (अंतिम रेखा) पर "#" को हटाकर पृष्ठभूमि रंगों के आदेशों को ओवरराइड करता है ताकि सलाखों को मेरे रंगों को रंग दिया जा सके लेकिन पृष्ठभूमि में केवल दो रंग हैं जिन्हें मैं barchart में चाहता हूं।

मैं एक scale_fill_manual आदेश geom_bar barchart करने के लिए अन्य geom_rect पृष्ठभूमि के लिए आवेदन और (या मैं अन्य तरीकों से एक ही प्रभाव कैसे प्राप्त कर सकते हैं) कैसे हो सकती है?

उत्तर

8

समस्या यह है कि आप rects और scores दोनों में "a" और "b" का उपयोग कर रहे है, तो वे एक ही रंग से मैप किया गया मिलता है। चूंकि आयतों को प्लेसहोल्डर मान माना जाता है, इसलिए उन्हें scores में किसी भी चीज़ के बाद कुछ अलग प्रकार में बदलें।

rects$col <- c("Z1","Z2","Z3","Z4","Z5") 

अब आप सभी (7) रंगों के साथ एक scale_fill_manual बना सकते हैं।

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, 
          ymax = yend, fill=col), alpha = 0.3) + 
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") + 
scale_fill_manual(values=c("indianred1", "indianred4", medals)) + 
scale_x_continuous(breaks = 1:4, labels = labels) 

enter image description here

+0

शानदार! धन्यवाद। (मुझे आपकी तस्वीर की तरह सब कुछ बाहर निकलने के लिए scale_fill_manual में मान सूची की शुरुआत में पदक स्विच करना पड़ा था, लेकिन यह काम कर रहा था।) –