Émuler la palette de couleurs par défaut de ggplot2

Quelle fonction puis-je utiliser pour émuler la palette de couleurs par défaut de ggplot2 pour un nombre de couleurs souhaité. Par exemple, une entrée de 3 produirait un vecteur de caractères de couleurs HEX avec ces couleurs: entrer la description de l'image ici

Il n’y a que des teintes équidistantes autour de la roue chromatique, à partir de 15:

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

Par exemple:

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

entrer la description de l'image ici

Ceci est le résultat de

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

Quatre couleurs ggplot

 show_col(hue_pal()(3)) 

Trois couleurs ggplot

Ces réponses sont toutes très bonnes, mais je voulais partager une autre chose que j’ai découverte sur stackoverflow qui est vraiment très utile, voici le lien direct

Fondamentalement, @DidzisElferts montre comment vous pouvez obtenir toutes les couleurs, les coordonnées, etc. que ggplot utilise pour créer un tracé que vous avez créé. Très agréable!

 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 

À partir de la page 106 du livre ggplot2 de Hadley Wickham:

Le schéma de couleurs par défaut, scale_colour_hue, sélectionne des teintes régulièrement espacées autour de la roue chromatique hcl.

Avec un peu d’ingénierie inverse, vous pouvez construire cette fonction:

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

Démontrer ceci en barplot:

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

entrer la description de l'image ici