2013-06-18 27 views
33

के लिए मैन्युअल रूप से समूह रंग सेट करना मेरे पास एक डेटा सेट है जिसमें से मुझे कई दर्जन भूखंड बनाना पड़ता है। डेटा में प्रत्येक समूह के भीतर 30 समूह और कई माप शामिल हैं।ggplot2

अधिकांश भूखंड एक ही समय में सभी समूहों का उपयोग नहीं करेंगे।

मेरा लक्ष्य समूह के समूह के लिए एक एकल रंगीन पालीट होना है जैसे कि किसी दिए गए समूह सभी ग्राफों में एक ही रंग है। नीचे दिए गए उदाहरण में, इसका मतलब यह होगा कि Group CPlot 1 और Plot 2 में एक ही रंग है।

मेरा सवाल यह है कि इस बारे में कैसे जाना है।

मैंने scale_fill_manual (और scal_color_manual, उचित होने पर) की कई भिन्नताओं की कोशिश की है। जबकि रंगों को नामित पैलेट से चुना जाता है, मैं समूह द्वारा पैलेट को इंडेक्स नहीं कर सकता, या किसी अन्य समूह को किसी अनुपस्थित समूह

से संबंधित रंगों पर "छोड़ने" के लिए प्रतीत नहीं होता है, मैंने यह भी सोचा कि डेटा की एक कॉलम के रूप में रंगीन जानकारी प्लॉट की जा रही है, लेकिन मुझे यकीन है कि समूह के रंग के रूप में इस कॉलम का उपयोग कैसे करें।

Plot Example

# SAMPLE DATA: 
DT1 <- data.table(Name=c("C_sub1", "A_sub1", "A_sub2"), Value=c(2,5,3), Group=c("C", "A", "A"), key="Group") 
DT2 <- data.table(Name=c("A_sub1", "B_sub1", "C_sub1", "C_sub2"), Value=c(4,3,6,3), Group=c("A", "B", "C", "C"), key="Group") 

# SAMPLE Color Pallette 
ColorsDT <- data.table(Group=LETTERS[1:5], Color=c("#333BFF", "#CC6600", "#9633FF", "#E2FF33", "#E3DB71"), key="Group") 

# Add a column for Color, according to the Group 
DT1[ColorsDT, Color := i.Color] 
DT2[ColorsDT, Color := i.Color] 

# A Basic Plot 
simplePlot <- function(DT, tit) 
    ggplot(DT ,aes(x=Name, y=Value, fill=Group)) + 
    geom_bar(stat="identity") + xlab("") + ggtitle(tit) 
    # Tried sevearl variations of: 
    # + scale_fill_manual(values=ColorsDT$Color) 


# Plot Them 
grid.arrange(ncol=2, simplePlot(DT1, tit="Plot 1"), simplePlot(DT2, tit="Plot 2")) 

उत्तर

38

आप एक रंग के साथ अपने समूहों में से प्रत्येक संबद्ध कर सकते हैं, तो कार्य करने के लिए पारित:

group.colors <- c(A = "#333BFF", B = "#CC6600", C ="#9633FF", D = "#E2FF33", E = "#E3DB71") 

simplePlot <- function(DT, tit) 
    ggplot(DT ,aes(x=Name, y=Value, fill=Group)) + 
    geom_bar(stat="identity") + xlab("") + ggtitle(tit) + 
    #Specify colours 
    scale_fill_manual(values=group.colors) 

अपने भूखंडों तब का उपयोग कर:

grid.arrange(ncol=2, simplePlot(DT1, tit="Plot 1"), 
    simplePlot(DT2, tit="Plot 2")) 

enter image description here

मुझे लगता है कि आपके दृष्टिकोण के साथ समस्या यह थी कि रंगों का नाम नहीं दिया गया था, इसलिए scale_fill_manual() उन्हें अलग नहीं कर सकता। की तुलना करें:

साथ
ColorsDT <- data.table(Group=LETTERS[1:5], Color=c("#333BFF", "#CC6600", "#9633FF", "#E2FF33", "#E3DB71"), key="Group") 
ColorsDT 
# Group Color 
#1:  A #333BFF 
#2:  B #CC6600 
#3:  C#9633FF 
#4:  D #E2FF33 
#5:  E #E3DB71 

:

ColorsDT.name <- data.table(A = "#333BFF", B = "#CC6600", C = "#9633FF", D = "#E2FF33", E = "#E3DB71") 
ColorsDT.name 
#   A  B  C  D  E 
# 1: #333BFF #CC6600 #9633FF #E2FF33 #E3DB71