Emula la tavolozza colors predefinita ggplot2

Quale funzione posso utilizzare per emulare la tavolozza colors predefinita di ggplot2 per un numero desiderato di colors. Ad esempio, un input di 3 produrrebbe un vettore di caratteri di colors HEX con questi colors: inserisci la descrizione dell'immagine qui

Sono solo sfumature equidistanti attorno alla ruota dei colors, a partire da 15:

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

Per esempio:

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

inserisci la descrizione dell'immagine qui

Questo è il risultato di

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

Ggplot a quattro colori

 show_col(hue_pal()(3)) 

Ggot a tre colori

Queste risposte sono tutte molto buone, ma volevo condividere un’altra cosa che ho scoperto su StackOverflow che è davvero molto utile, ecco il link diretto

Fondamentalmente, @DidzisElferts mostra come puoi ottenere tutti i colors, le coordinate, ecc. Che ggplot usa per build una trama che hai creato. Molto bella!

 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 

Dalla pagina 106 del libro ggplot2 di Hadley Wickham:

Lo schema di colors predefinito, scale_colour_hue seleziona tonalità uniformsmente distanziate attorno alla ruota dei colors hcl.

Con un po ‘di reverse engineering puoi build questa funzione:

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

Dimostrare questo in barplot:

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

inserisci la descrizione dell'immagine qui