2010-06-20 13 views
28

Qualcuno sa come utilizzare una tavolozza di colori predefinita in ggplot?Utilizzo di una tavolozza di colori predefinita in ggplot

Ho un vettore di colori vorrei utilizzare:

rhg_cols <- c("#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B", 
       "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000") 

Ma quando provo a passarlo a niente accaduto

ggplot(mydata, aes(factor(phone_partner_products)), color = rhg_cols) + 
    geom_bar() 

risposta

25

Si deve mettere colour = rhg_cols all'interno aes(). Per quanto posso dire, vuoi applicare il gradiente alle barre (in barattolo) con variabile fattore sull'ascissa? Quindi utilizzare fill - provare questo invece:

ggplot(mydata, aes(factor(phone_partner_products), fill = factor(phone_partner_products))) + 
    geom_bar() + 
    scale_fill_manual(values = rhg_cols) 

o cercare di raggiungere replica approssimata con:

ggplot(mydata, aes(factor(phone_partner_products), fill = phone_partner_products))) + 
    geom_bar() + 
    scale_fill_gradient(low = "#771C19", hi = "#000000") 

noti che in secondo caso una variabile continua viene passato a fill estetica, quindi scale_fill_gradient viene passato in seguito. Se si passa a factorfill AES, è necessario attaccare con scale_fill_manual(values = rhg_cols)

+1

Dovrebbe essere "alto" invece di "ciao" su scale_fill_gradient (basso = "# 771C19", ciao = "# 000000"). – Eduardo

9

aggiungere prima, i colori ai vostri set di dati:

mydata$col <- rhg_cols 

Poi mappa di colori a quella colonna e utilizzare scale_colour_identity

0.123.
ggplot(mydata, aes(factor(phone_partner_products, colour = col))) + 
    geom_bar() + 
    scale_colour_identity() 
+0

mmm ... la prima linea abbia qualche problema ... ho almeno 800 righe ei colori sono solo il 10 > mydata $ col <- rhg_cols Errore in '$ <-. Data.frame' ('* tmp *', "col", value = c ("# 771C19", "# AA3929",: sostituzione ha 10 righe, i dati sono 865 –

+0

e ovviamente il fattore (phone_partner_products) restituisce solo 5 elementi, quindi un una tavolozza di 10 colori dovrebbe essere sufficiente –

+1

Oh, è una tavolozza, ecco perché il codice riproducibile è sempre utile – hadley

18

Se i colori sono una tavolozza, utilizzare scale_colour_manual:

ggplot(mydata, aes(factor(phone_partner_products), colour = colour_variable)) + 
    scale_colour_manual(values = rhg_cols) 
+0

Questo mi ha indirizzato nella giusta direzione, tuttavia l'argomento di 'scale_colour_manual()' doveva essere 'values ​​= .. .' per farlo funzionare – mvds

8

Dal momento che i colori desiderati sono i valori del colore estetica, cosa si vuole veramente è la scala identity, in questo caso scale_fill_identity.

ggplot(mydata, aes(factor(phone_partner_products)), color=rhg_cols) + 
    geom_bar() + 
    scale_fill_identity()) 

Dal momento che non ha fornito dati, ho intenzione di usare un esempio un po 'diverso con i dati del colore:

rhg_cols <- c("#771C19","#AA3929","#E25033","#F27314","#F8A31B", 
       "#E2C59F","#B6C5CC","#8E9CA3","#556670","#000000") 
mydata <- sample(rhg_cols, 100, replace = TRUE) 
qplot(mydata, fill = mydata) + 
    scale_fill_identity() 

enter image description here


nota: ho omesso + opts(axis.text.x=theme_text(angle=90)) per chiarezza nell'esempio.

Problemi correlati