2012-04-04 17 views
9

Sto generando un istogramma e vorrei colorare determinati gruppi con colori specifici. Qui è la mia istogramma:Come riempire manualmente i colori in un istogramma ggplot2

enter image description here

ho 14 gruppi e vorrei colorare la prima 7 rosso, il prossimo 4 blu, e la finale 3 arancione. Come posso farlo in ggplot? Grazie.

+0

Sto assumendo vuoi dire una trama bar, non un istogramma? C'è una (grande) differenza. – joran

+0

I dati sono un diagramma di frequenza da dati discontinui. L'ho tracciato usando 'geom_histogram'. Non sono sicuro se questo costituisce un "grafico a barre" o un "istogramma discreto". – drbunsen

+2

Ok. Probabilmente userò semplicemente geom_bar in quel caso. E poi hai solo bisogno di una variabile di raggruppamento nella tua cornice dati che definisca il raggruppamento di colori che vuoi, e poi mappalo a "riempire". Ci sono alcuni esempi in '? Geom_bar'. – joran

risposta

12

VERSIONE AGGIORNATA

Non c'è bisogno di specificare colonna di raggruppamento, ggplot comando è molto più compatto.

library(ggplot2) 
set.seed(1234) 

# Data generating block 
df <- data.frame(x=sample(1:14, 1000, replace=T)) 
# Colors 
colors <- c(rep("red",7), rep("blue",4), rep("orange",3)) 

ggplot(df, aes(x=x)) + 
    geom_histogram(fill=colors) + 
    scale_x_discrete(limits=1:14) 

enter image description here

versione vecchia

library(ggplot2) 

# 
# Data generating block 
# 
df <- data.frame(x=sample(c(1:14), 1000, replace=TRUE)) 
df$group <- ifelse(df$x<=7, 1, ifelse(df$x<=11, 2, 3)) 

# 
# Plotting 
# 
ggplot(df, aes(x=x)) + 
    geom_histogram(data=subset(df,group==1), fill="red") + 
    geom_histogram(data=subset(df,group==2), fill="blue") + 
    geom_histogram(data=subset(df,group==3), fill="orange") + 
    scale_x_discrete(breaks=df$x, labels=df$x) 

enter image description here

+0

Ho trovato l'approccio '' geom_histogram (fill = colors) '' per essere l'unico modo per gestire un istogramma cumulativo '' aes (y = cumsum (.. count ../ sum (.. count ..)) ' ', perché l'impostazione di un riempimento all'interno di' 'aes'' ha comportato l'impilamento di gruppi. L'approccio '' stat_ecdf'' più semplice non ha funzionato per me perché non richiede l'opzione '' breaks''. Alla fine, solo questo approccio ha funzionato. – PatrickT

Problemi correlati