2011-11-19 15 views
121

¿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 carácter de colores HEX con estos colores: tonos enter image description hereEmular la paleta de colores predeterminada de ggplot2

+7

vistazo al paquete escalas – hadley

+1

dulce! brewer_pal será realmente útil – SFun28

+1

¡Sí! Guardo una impresión de 'display.brewer.all()' en mi escritorio. Creo que me gusta Set1, lo mejor para los factores. –

Respuesta

167

Se acaba igualmente espaciados alrededor de la rueda de color, a partir de 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

+1

+1 Me gusta su buena y simple solución, aunque todavía estoy tratando de entender por qué tiene 'length = n + 1' en' seq', mientras que tengo 'length = n' – Andrie

+9

Porque 0 == 360 – hadley

35

en la página 106 del libro ggplot2 por Hadley Wickham:

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

Con un poco de ingeniería inversa se puede 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) 
} 

La demostración de esto en barplot:

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

enter image description here

+2

Es incluso más simple que esto. Puede evitar la primera línea de álgebra ya que, aunque no está en la ayuda, 'hcl' recicla valores> 360. –

+10

Incluso puede usar' scales ::: show_col (ggplotColours (n = 3)) 'para mostrar el color y valores –

41

Estas respuestas son todos muy buenos, pero Quería compartir otra cosa que descubrí en stackoverflow que es realmente bastante útil, aquí está t él direct link

Básicamente, @DidzisElferts muestra cómo puedes obtener todos los colores, coordenadas, etc. que usa ggplot para construir un diagrama 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 
52

Este es el resultado de

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

Four color ggplot

show_col(hue_pal()(3)) 

Three color ggplot

+1

Por extraño que parezca, los colores (en la segunda imagen al menos) no coinciden con sus códigos RGB. Sin embargo, mirando un gráfico que hice localmente, estos códigos RGB * son * correctos. – Sparhawk

+1

tal vez es una cosa de navegador? –

+1

Sí, muy extraño.En Firefox, el verde es # 15ba3e, en Chromium es # 00b83a, y después de descargar la imagen y verlo en un programa de imagen dedicado (Gwenview) es # 00b839. Solo Konqueror lo muestra correctamente como # 00ba38. Entonces, solo uno tiene razón, ¡y ninguno es consistente! – Sparhawk

Cuestiones relacionadas