Configuración manual de colores grupales para ggplot2

Tengo un conjunto de datos del cual tengo que hacer varias docenas de ttwigs. Los datos constan de 30 grupos y varias medidas dentro de cada grupo.

La mayoría de las plots no usarán todos los grupos a la vez.

Mi objective es tener una sola paleta de colores para el conjunto de grupos, de modo que cualquier grupo dado sea del mismo color en todos los gráficos. En el ejemplo siguiente, esto significaría que el Group C es del mismo color en el Plot 1 y en el Plot 2 .

Mi pregunta es cómo hacer esto.

Probé varias variaciones de scale_fill_manual (y scal_color_manual, cuando correspondía). Si bien los colores se eligen de la paleta designada, no puedo indexar la paleta por el grupo, o de alguna otra manera para “saltar” sobre los colores correspondientes a un grupo faltante.

También pensé en intentar agregar la información de color como una columna de los datos que se trazan, pero no estoy seguro de cómo utilizar esta columna como color para el grupo.

Ejemplo de trazado

 # 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")) 

Puede asociar a cada uno de sus grupos con un color, luego pasar a la función:

 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) 

Luego usando tus ttwigs:

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

enter image description here

Creo que el problema con su enfoque fue que los colores no fueron nombrados, por lo que scale_fill_manual() no puede asociarlos. Comparar:

 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 

con:

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