mudando as colors do fator ggplot?

Percebo que aqui Box e bigodes traçam a chamada:

p + geom_boxplot(aes(fill = factor(cyl))) 

gera colors vermelho / verde / azul shiny para preenchimento de boxplots, enquanto:

 p + geom_boxplot(aes(fill = factor(vs))) 

Gera um verde claro / vermelho claro de colors. Nos meus dados, eu obtenho o segundo conjunto de colors, mas gostaria do primeiro conjunto (como em

 p + geom_boxplot(aes(fill = factor(cyl))) 

o que controla qual conjunto de colors o ggplot usa e como você pode mudá-lo?

obrigado

As colors padrão são matizes uniformemente espaçados ao redor da roda de colors. Você pode verificar como isso é gerado a partir daqui .

Você pode usar scale_fill_manual com essas colors:

 p + scale_fill_manual(values=c("#F8766D", "#00BA38")) 

Aqui, eu usei ggplot_build(p)$data do cyl para obter as colors.

Alternativamente, você pode usar outra paleta da seguinte forma:

 p + scale_fill_brewer(palette="Set1") 

E para encontrar as colors na paleta, você pode fazer:

 require(RColorBrewer) brewer.pal(9, "Set1") 

Verifique o pacote para conhecer as paletas e outras opções, se estiver interessado.

Edit: @ user248237dfsf, como apontei no link no topo, essa function do @Andrie mostra as colors geradas:

 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) } > ggplotColours(2) # [1] "#F8766D" "#00BFC4" > ggplotColours(3) # [1] "#F8766D" "#00BA38" "#619CFF" 

Se você olhar as duas colors geradas, a primeira é a mesma, mas a segunda cor não é a mesma, quando n = 2 e n = 3. Isso ocorre porque gera colors de tons uniformemente espaçados . Se você quiser usar as colors de cyl para vs então você terá que definir scale_fill_manual e usar essas colors geradas com n = 3 desta function.

Para verificar se isso é realmente o que está acontecendo, você pode fazer:

 p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot(aes(fill = factor(cyl))) p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot(aes(fill = factor(vs))) 

Agora, se você fizer:

 ggplot_build(p1)$data[[1]]$fill # [1] "#F8766D" "#00BA38" "#619CFF" ggplot_build(p2)$data[[1]]$fill # [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D" 

Você vê que estas são as colors que são geradas usando ggplotColours e a razão para a diferença também é óbvia. Eu espero que isso ajude.

Adicionando às respostas anteriores:

Ao usar a estética col (em vez de fill ), use scale_color_manual . Isso é útil para geom_point() :

 myColors <- c("#56ddc5", "#ff3db7", "#4699dd") ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + geom_point() + scale_color_manual(values=myColors) 

insira a descrição da imagem aqui