Emulate ggplot2 default color palette

后端 未结 4 1467
猫巷女王i
猫巷女王i 2020-11-22 09:13

What function can I use to emulate ggplot2\'s default color palette for a desired number of colors. For example, an input of 3 would produce a character vector of HEX color

相关标签:
4条回答
  • 2020-11-22 09:37

    It is just equally spaced hues around the color wheel, starting from 15:

    gg_color_hue <- function(n) {
      hues = seq(15, 375, length = n + 1)
      hcl(h = hues, l = 65, c = 100)[1:n]
    }
    

    For example:

    n = 4
    cols = gg_color_hue(n)
    
    dev.new(width = 4, height = 4)
    plot(1:n, pch = 16, cex = 2, col = cols)
    

    enter image description here

    0 讨论(0)
  • 2020-11-22 09:46

    These answers are all very good, but I wanted to share another thing I discovered on stackoverflow that is really quite useful, here is the direct link

    Basically, @DidzisElferts shows how you can get all the colours, coordinates, etc that ggplot uses to build a plot you created. Very nice!

    p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
    ggplot_build(p)$data
    [[1]]
         fill  y count x ndensity ncount  density PANEL group ymin ymax xmin xmax
    1 #F8766D  5     5 1        1      1 1.111111     1     1    0    5 0.55 1.45
    2 #C49A00 47    47 2        1      1 1.111111     1     2    0   47 1.55 2.45
    3 #53B400 41    41 3        1      1 1.111111     1     3    0   41 2.55 3.45
    4 #00C094 11    11 4        1      1 1.111111     1     4    0   11 3.55 4.45
    5 #00B6EB 33    33 5        1      1 1.111111     1     5    0   33 4.55 5.45
    6 #A58AFF 35    35 6        1      1 1.111111     1     6    0   35 5.55 6.45
    7 #FB61D7 62    62 7        1      1 1.111111     1     7    0   62 6.55 7.45
    
    0 讨论(0)
  • 2020-11-22 09:47

    This is the result from

    library(scales)
    show_col(hue_pal()(4))
    

    show_col(hue_pal()(3))
    

    0 讨论(0)
  • 2020-11-22 09:50

    From page 106 of the ggplot2 book by Hadley Wickham:

    The default colour scheme, scale_colour_hue picks evenly spaced hues around the hcl colour wheel.

    With a bit of reverse engineering you can construct this function:

    ggplotColours <- function(n = 6, h = c(0, 360) + 15){
      if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n
      hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
    }
    

    Demonstrating this in barplot:

    y <- 1:3
    barplot(y, col = ggplotColours(n = 3))
    

    enter image description here

    0 讨论(0)
提交回复
热议问题