Eu tenho me acostumado com R no último mês.
Aqui está a minha pergunta:
Qual é uma boa maneira de atribuir cores a variáveis categóricas no ggplot2 que possuem mapeamento estável? Preciso de cores consistentes em um conjunto de gráficos que tenham subconjuntos diferentes e número diferente de variáveis categóricas.
Por exemplo,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
onde categoricalData
tem 5 níveis.
E depois
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
onde categoricalData.subset
tem 3 níveis.
No entanto, um nível específico que está em ambos os conjuntos terá uma cor diferente, o que dificulta a leitura dos gráficos juntos.
Preciso criar um vetor de cores no quadro de dados? Ou existe outra maneira de atribuir cores específicas a categorias?
factor
é comum entre todas as parcelas.fillScale <- scale_fill_manual(name = "grp",values = myColors)
para usar isso com gráficos de barras.Estou na mesma situação apontada por malcook em seu comentário : infelizmente a resposta de Thierry não funciona com o ggplot2 versão 0.9.3.1.
Aqui está a primeira figura:
e a segunda figura:
Como podemos ver, as cores não permanecem fixas, por exemplo, E muda de magenta para azul.
Conforme sugerido por malcook em seu comentário e por hadley em seu comentário, o código que usa
limits
funciona corretamente:fornece a seguinte figura, que está correta:
Esta é a saída de
sessionInfo()
:fonte
A solução mais fácil é converter sua variável categórica em um fator anterior ao subconjunto. Bottomline é que você precisa de uma variável fator com exatamente os mesmos níveis em todos os seus subconjuntos.
Com uma variável de caractere
Com uma variável fator
fonte
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
preservasse a associação do fator de cor |, mas que funciona, exceto, nas minhas mãos, que a queda = TRUE NÃO está sendo respeitada (espero que remova o nível de a lenda). Drat ... ou sou eu?Este é um post antigo, mas eu estava procurando resposta para essa mesma pergunta,
Por que não tentar algo como:
Se você tiver valores categóricos, não vejo uma razão para que isso não funcione.
fonte
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
para evitar a codificação manual dos níveis.Com base na resposta muito útil de joran, consegui encontrar esta solução para uma escala de cores estável para um fator booleano (
TRUE
,FALSE
).Como o ColorBrewer não é muito útil em escalas de cores binárias, as duas cores necessárias são definidas manualmente.
Aqui
myboolean
está o nome da coluna quemyDataFrame
contém o fator TRUE / FALSE.date
eduration
são os nomes das colunas a serem mapeadas para os eixos xey da plotagem neste exemplo.fonte