Ręczne ustawianie kolorów grupy dla ggplot2

Mam zbiór danych, z którego muszę zrobić kilkadziesiąt działek. Dane składają się z 30 grup i kilku pomiarów w każdej grupie.

Większość działek nie będzie używać wszystkich grup jednocześnie.

Moim celem jest posiadanie jednej palety kolorów dla zbioru grup, tak aby każda grupa miała ten sam kolor na wszystkich wykresach. W poniższym przykładzie oznaczałoby to, że Group C jest tym samym kolorem w Plot 1 i w Plot 2.

Moje pytanie brzmi, jak to zrobić.

Wypróbowałem kilka odmian scale_fill_manual (i scal_color_manual, gdy jest to właściwe). Podczas gdy kolory są wybierane z wyznaczonej palety, Nie mogę zindeksować palety według grupy lub w inny sposób "pominąć" kolory odpowiadające brakującej grupie

Pomyślałem również, aby spróbować dodać informacje o kolorze jako kolumnę wykreślanych danych, ale nie jestem pewien, jak użyć tej kolumny jako koloru dla grupy.

Przykład Wykresu

# 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"))
Author: Ricardo Saporta, 2013-06-19

1 answers

Możesz powiązać każdą ze swoich grup z kolorem, a następnie przejść do funkcji:

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)

Następnie używając swoich działek:

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

Tutaj wpisz opis obrazka

Myślę, że problem z twoim podejściem polegał na tym, że kolory nie zostały nazwane, więc nie można ich przypisać. Porównaj:
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

Z:

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
 49
Author: alexwhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 22:33:17