2012-04-04 17 views
9

Estoy generando un histograma y me gustaría colorear ciertos grupos con colores específicos. Aquí está mi histograma:Cómo rellenar manualmente los colores en un histograma ggplot2

enter image description here

tengo 14 grupos y me gustaría dar color a la primera 7 rojo, el próximo 4 de azul, y el 3 de naranja final. ¿Cómo puedo hacer esto en ggplot? Gracias.

+0

Asumo que quiere decir un diagrama de barras, no es un histograma? Hay una (gran) diferencia. – joran

+0

Los datos son un gráfico de frecuencia a partir de datos discontinuos. Lo tracé usando 'geom_histogram'. No estoy seguro de si esto constituye un "gráfico de barras" o un "histograma discreto". – drbunsen

+2

Ok. Probablemente solo use geom_bar en ese caso. Y luego solo necesita una variable de agrupamiento en su marco de datos que defina la agrupación de colores que desea, y luego asigne eso a 'fill'. Hay algunos ejemplos en '? Geom_bar'. – joran

Respuesta

12

versión actualizada

No hay necesidad de especificar columna de agrupación, ggplot comando es mucho más compacto.

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

OLD VERSION

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

Encontré el enfoque '' geom_histogram (fill = colours) '' para ser la única forma de manejar un histograma acumulativo '' aes (y = cumsum (.. count ../ sum (.. count ..))) ' ', porque establecer un relleno dentro de' 'aes'' resultó en grupos apilados. El enfoque '' stat_ecdf'' más simple no funcionó para mí porque no toma la opción '' breaks''. Al final, solo este enfoque funcionó. – PatrickT

Cuestiones relacionadas