Emular la paleta de colores predeterminada ggplot2

¿Qué función puedo usar para emular la paleta de colores predeterminada de ggplot2 para una cantidad de colores deseada? Por ejemplo, una entrada de 3 produciría un vector de caracteres de colores HEX con estos colores: enter image description here

Se trata de tonalidades equidistantes alrededor de la rueda de colores, comenzando desde 15:

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

Por ejemplo:

 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

Este es el resultado de

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

Ggplot de cuatro colores

 show_col(hue_pal()(3)) 

Ggplot de tres colores

Estas respuestas son todas muy buenas, pero quería compartir otra cosa que descubrí en stackoverflow que es realmente bastante útil, aquí está el enlace directo

Básicamente, @DidzisElferts muestra cómo puedes obtener todos los colores, coordenadas, etc. que usa ggplot para construir un diagtwig que creaste. ¡Muy agradable!

 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 

De la página 106 del libro ggplot2 de Hadley Wickham:

El esquema de color predeterminado, scale_colour_hue recoge tonos uniformemente espaciados alrededor de la rueda de color hcl.

Con un poco de ingeniería inversa puedes construir esta función:

 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) } 

Demostrando esto en barra de barras:

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

enter image description here