Catherine Laing
Catherine Laing

Reputation: 657

Changing fill of legend shape in ggplot

I have a rather complicated plot that shows three different variables in my data - see the example plot below. I've removed one of the legends and am trying to show the consonant colours more clearly by filling in the squares. I've tried using guide_legend(override.aes()) but I can't find a way to adjust the colours on this. Is there a way to do it?

The sample data is:

 exampledata <- tribble(~subject, ~group, ~time, ~consonant, ~type,  ~n,
                   "1", "A", 1, "p", F, 10,
                   "1", "A", 1, "t", T, 12,
                   "1", "A", 1, "k", T, 50,
                   "2", "A", 1, "p", T, 0,
                   "2", "A", 1, "t", T, 45,
                   "2", "A", 1, "k", F, 23,
                   "2", "A", 2, "p", F, 2,
                   "2", "A", 2, "t", T, 34,
                   "2", "A", 2, "k", T, 56,
                   "3", "B", 1, "p", F, 12,
                   "3", "B", 1, "t", T, 13,
                   "3", "B", 1, "k", F, 50,
                   "4", "A", 1, "p", T, 10,
                   "4", "A", 1, "t", F, 12,
                   "4", "A", 1, "k", T, 50,
                   "5", "B", 1, "p", T, 0,
                   "5", "B", 1, "t", T, 24,
                   "5", "B", 1, "k", F, 3,
                   "5", "B", 2, "p", F, 23,
                   "5", "B", 2, "t", F, 12,
                   "5", "B", 2, "k", T, 7,
                   "6", "A", 1, "p", F, 52,
                   "6", "A", 1, "t", F, 12,
                   "6", "A", 1, "k", T, 64
 )  

And the ggplot code that I have so far:

 exampleplot <- ggplot(exampledata, aes(x = time, y=n, 
                       fill=type, colour = consonant))  +  
   geom_col(lwd = 1, aes(linetype = group)) +
   scale_linetype_manual(values = c("A" = "solid", 
                                    "B" = "twodash"), guide = F) +
   facet_grid(~subject, scales = "free_x", switch = "x") + 
   scale_fill_manual(values=c("gray97", "gray77"), 
                     labels = c("Type 1", "Type 2")) +
   theme_bw(base_size = 18) + 
   theme(strip.text.x = element_text(angle=75),
         axis.text.x  = element_blank(),
         axis.ticks.x = element_blank(),
         panel.border =element_blank(),
         strip.background = element_blank())

 plot(exampleplot)

example plot

Upvotes: 2

Views: 127

Answers (2)

Humpelstielzchen
Humpelstielzchen

Reputation: 6441

Try this:

ggplot(exampledata, aes(x = time, y=n, 
                                       fill=type, colour = consonant))  +  
  geom_col(lwd = 1, aes(linetype = group)) +
  guides(colour = guide_legend(override.aes = list(fill = c("#F8766D", "#00BA38", "#619CFF")))) +
  scale_linetype_manual(values = c("A" = "solid", 
                                   "B" = "twodash"), guide = F) +
  facet_grid(~subject, scales = "free_x", switch = "x") + 
  scale_fill_manual(values=c("gray97", "gray77"), 
                    labels = c("Type 1", "Type 2")) +
  theme_bw(base_size = 18) + 
  theme(strip.text.x = element_text(angle=75),
        axis.text.x  = element_blank(),
        axis.ticks.x = element_blank(),
        panel.border =element_blank(),
        strip.background = element_blank())

If have added this line:

guides(colour = guide_legend(override.aes = list(fill = c("#F8766D", "#00BA38", "#619CFF"))))

enter image description here

Upvotes: 1

tom
tom

Reputation: 725

exampleplot <- ggplot(exampledata, aes(x = time, y=n, 
                       alpha=type, fill = consonant, color = consonant))  +  
   geom_col(lwd = 1, aes(linetype = group)) +
   scale_linetype_manual(values = c("A" = "solid", 
                                    "B" = "twodash"), guide = F) +
   facet_grid(~subject, scales = "free_x", switch = "x") + 
   scale_alpha_discrete(range=c(0.4,0.8), 
                    labels = c("Type 1", "Type 2")) +
   theme_bw(base_size = 18) + 
   theme(strip.text.x = element_text(angle=75),
         axis.text.x  = element_blank(),
         axis.ticks.x = element_blank(),
         panel.border =element_blank(),
         strip.background = element_blank())

 plot(exampleplot)

I added a fill in the aes and alpha to keep the differences between Type. Is this the output you want with filled squared?

enter image description here

Upvotes: 2

Related Questions