Me he estado poniendo al día con R en el último mes.
Aquí está mi pregunta:
¿Cuál es una buena manera de asignar colores a variables categóricas en ggplot2 que tienen un mapeo estable? Necesito colores consistentes en un conjunto de gráficos que tienen diferentes subconjuntos y diferentes números de variables categóricas.
Por ejemplo,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
donde categoricalData
tiene 5 niveles.
Y entonces
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
donde categoricalData.subset
tiene 3 niveles.
Sin embargo, un nivel particular que está en ambos conjuntos terminará con un color diferente, lo que hace que sea más difícil leer los gráficos juntos.
¿Necesito crear un vector de colores en el marco de datos? ¿O hay otra forma de asignar colores específicos a las categorías?
factor
común entre todas las parcelas.fillScale <- scale_fill_manual(name = "grp",values = myColors)
para usar esto con gráficos de barras.Estoy en la misma situación señalada por malcook en su comentario : desafortunadamente, la respuesta de Thierry no funciona con ggplot2 versión 0.9.3.1.
Aquí está la primera figura:
y la segunda figura:
Como podemos ver, los colores no permanecen fijos, por ejemplo, E cambia de magenta a blu.
Según lo sugerido por malcook en su comentario y por hadley en su comentario, el código que utiliza
limits
funciona correctamente:da la siguiente figura, que es correcta:
Este es el resultado de
sessionInfo()
:fuente
La solución más fácil es convertir su variable categórica en un factor antes del subconjunto. La conclusión es que necesita una variable de factor con exactamente los mismos niveles en todos sus subconjuntos.
Con una variable de caracteres
Con una variable de factor
fuente
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
para preservar el color | asociación factor, pero que funciona, excepto, en mis manos, la caída = TRUE se NO ser respetados (espero que para eliminar el nivel de la leyenda). Drat ... o soy yo?Esta es una publicación antigua, pero estaba buscando respuesta a esta misma pregunta,
¿Por qué no probar algo como:
Si tiene valores categóricos, no veo una razón por la cual esto no debería funcionar.
fuente
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
para evitar tener que codificar manualmente los niveles.Basado en la muy útil respuesta de joran, pude encontrar esta solución para una escala de color estable para un factor booleano (
TRUE
,FALSE
).Dado que ColorBrewer no es muy útil con escalas de color binarias, los dos colores necesarios se definen manualmente.
Aquí
myboolean
está el nombre de la columna quemyDataFrame
contiene el factor VERDADERO / FALSO.date
yduration
son los nombres de columna que se asignarán al eje xey del diagrama en este ejemplo.fuente