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


205

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: entrez la description de l'image ici


10
Regardez le paquet de balances
— hadley

2
Oui! Je garde une impression display.brewer.all()sur mon bureau. Je pense que j'aime mieux Set1 pour les facteurs.
— John Colby

bonne idée! Je vais faire la même impression. D'accord sur Set1, je me suis déjà retrouvé à l'utiliser dans la plupart de mes nouveaux graphiques.
— SFun28

Réponses:


275

Il s'agit simplement de teintes également espacées 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)

entrez la description de l'image ici


2
+1 J'aime votre solution simple et agréable, même si j'essaie toujours de comprendre pourquoi vous avez length=n+1dans le seq, alors que j'ailength=n
— Andrie

18
Parce que 0 == 360
— hadley

144

C'est le résultat de

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

Ggplot à quatre couleurs

show_col(hue_pal()(3))

Ggplot trois couleurs


1
Curieusement, les couleurs (au moins dans la deuxième image) ne correspondent pas à leurs codes RVB. Cependant, en regardant un graphique que j'ai fait localement, ces codes RVB sont corrects.
— Sparhawk

1
peut-être que c'est une chose de navigateur?
— Climbs_lika_Spyder

1
Oui, très étrange. Dans Firefox, le vert est # 15ba3e, dans Chromium c'est # 00b83a, et après avoir téléchargé l'image et visionné dans un programme d'image dédié (Gwenview), c'est # 00b839. Seul Konqueror l'affiche correctement sous la forme # 00ba38. Donc, un seul a raison, et aucun n'est cohérent!
— Sparhawk

1
? Est - il possible d'obtenir le nom de la couleur, par exemple « rouge2 », « Blue3" Le code de couleur, par exemple # 00b83a, est difficile à utiliser de manière intuitive.
— Sibo Jiang

2
Pour faciliter le copier-coller, les valeurs hexadécimales sont: # f8766d - Rouge # 00ba38 - Vert # 83b0fc - Bleu
— pluke

66

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, coordonnées, etc. que ggplot utilise pour construire 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

46

De la page 106 du livre ggplot2 de Hadley Wickham:

La palette 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 de rétro-ingénierie, 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 cela dans barplot:

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

entrez la description de l'image ici


2
C'est encore plus simple que ça. Vous pouvez éviter la première ligne d'algèbre puisque, bien qu'elle ne soit pas dans l'aide, hclrecycle les valeurs> 360.
— John Colby

13
Vous pouvez même utiliser scales:::show_col(ggplotColours(n=3))pour afficher la couleur et les valeurs
— Stat-R

bien que je n'ai pas encore compris comment obtenir des échelles et son show_col pour cracher les valeurs (hexadécimales ou tout autre format) qu'il trace ...
— Stefano
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.