2013-02-28 13 views
21

Ho notato che qui Box and whiskers plot la chiamata:modifica dei colori dei fattori ggplot?

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

genera/colori vivaci rosso verde/blu per i grafici a scatole riempiono, mentre:

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

Genera un netto pallido verde/rosso di colori. In miei dati, ottengo il secondo set di colori, ma vorrei il primo set (come in

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

ciò che controlla la quale insieme di colori ggplot usa e come si può cambiare?

Grazie

risposta

29

I colori di default sono distribuiti uniformemente tonalità intorno alla ruota dei colori è possibile controllare come questo è generato da here

è possibile utilizzare scale_fill_manual con quei colori:..

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

Qui, ho usato ggplot_build(p)$data da cyl per ottenere i colori.

In alternativa, è possibile utilizzare un altro tavolozza così in questo modo:

p + scale_fill_brewer(palette="Set1") 

E per trovare i colori della tavolozza, si può fare:

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

Controllare il pacchetto per conoscere le palette e altre opzioni, se sei interessato.

Edit: @ user248237dfsf, come ho già fatto notare nel link in alto, questa funzione da @Andrie mostra i colori generati:

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 si guardano i due colori generati , il primo è lo stesso, ma il secondo colore non è lo stesso, quando n = 2 en = 3. Questo perché genera colori di equamente distanziati di tonalità. Se si desidera utilizzare i colori per cyl per vs, sarà necessario impostare scale_fill_manual e utilizzare questi colori generati con n = 3 da questa funzione.

per verificare che questo è proprio ciò che sta accadendo si potrebbe fare:

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

Ora, se si fa:

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

ggplot_build(p2)$data[[1]]$fill 
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D" 

Si vede che questi sono i colori che vengono generati utilizzando ggplotColours e la la ragione della differenza è anche ovvia. Spero che aiuti.

+2

Ma questo non spiega il motivo per cui per una variabile tracciata come un fattore si ottiene un insieme di colori e per un diverso si ottiene un altro insieme di colori come nel pagina doc a cui mi sono collegato. I colori sono equamente distanziati, posso vederlo, ma perché è diverso tra i due? Voglio che assomigli al primo, non al secondo. – user248237dfsf

+0

Sarebbe bello poter impostare manualmente i passaggi tra ciascun colore sulla ruota del colore. In questo modo potremmo ottenere un maggiore contrasto tra fattori consecutivi. Dopo 360 dovrebbe solo continuare da 0. – JohannesNE

5

aggiunta alle risposte precedenti:

Quando si utilizza il col estetica (invece di fill), utilizzare scale_color_manual.Questo è utile per 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) 

enter image description here

Problemi correlati