How do I change the outline colours of a boxplot with ggplot?

11,461

You have to:

  1. Add color = clarity to aesthetics
  2. Add scale_color_manual to ggplot object with wanted colors
  3. Name scale_color_manual the same way as scale_fill_manual to get single combined legend

Code :

library(dplyr)
library(ggplot2)
diamonds %>% 
    filter(clarity %in% c("I1","SI2")) %>% 
    ggplot(aes(x= color, y= price, fill = clarity, color = clarity))+
        geom_boxplot()+
        scale_fill_manual(name= "Clarity", values = c("grey40", "lightskyblue"))+
        scale_color_manual(name = "Clarity", values = c("black", "blue"))+
        facet_wrap( ~ cut)

Plot:

enter image description here

Share:
11,461

Related videos on Youtube

mckisa
Author by

mckisa

Updated on June 04, 2022

Comments

  • mckisa
    mckisa almost 2 years

    My data has values which are all the same so they are coming up as just a line in a box plot. This, however, means that I can't tell the difference between groups as the fill doesn't show up. How can I change the outlines of the boxplot to be a specific colour.

    Note: I do not want all the outline colours to be the same colour, as in the next line of code:

    library(dplyr)
    library(ggplot2)
    
    diamonds %>% 
          filter(clarity %in% c("I1","SI2")) %>% 
        ggplot(aes(x= color, y= price, fill = clarity))+
          geom_boxplot(colour = "blue")+
          scale_fill_manual(name= "Clarity", values = c("grey40", "lightskyblue"))+
          facet_wrap(~cut)
    

    Instead, I would like all the plots for I1 (filled with grey40) to be outlined in black while the plots for SI2 (filled with lightskyblue) to be outlined in blue.

    The following don't seem to work

    geom_boxplot(colour = c("black","blue"))+
    

    OR

    scale_color_identity(c("black", "blue"))+
    

    OR

    scale_color_manual(values = c("black", "blue"))+
    
    • Andrey Kolyadin
      Andrey Kolyadin over 6 years
      Add colour = clarity to aes() and use scale_color_manual(values = c("black", "blue")).
    • lukeA
      lukeA over 6 years
      And remove colour = "blue", because that would override the aes mapping. In addition, you probably want to name the color scale Clarity, too, because otherwise you get two legends.
    • mckisa
      mckisa over 6 years
      Perfect, thank you.
  • mckisa
    mckisa over 6 years
    Thank you! Nice and simple. I had tried each solution individually but not thought to put them together.