2010-03-30 15 views
8

tengo los siguientes datos simplescómo definir los colores de relleno en el histograma ggplot?

data <- structure(list(status = c(9, 5, 9, 10, 11, 10, 8, 6, 6, 7, 10, 
10, 7, 11, 11, 7, NA, 9, 11, 9, 10, 8, 9, 10, 7, 11, 9, 10, 9, 
9, 8, 9, 11, 9, 11, 7, 8, 6, 11, 10, 9, 11, 11, 10, 11, 10, 9, 
11, 7, 8, 8, 9, 4, 11, 11, 8, 7, 7, 11, 11, 11, 6, 7, 11, 6, 
10, 10, 9, 10, 10, 8, 8, 10, 4, 8, 5, 8, 7), statusgruppe = c(0, 
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, NA, 0, 1, 0, 1, 
0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0)), .Names = c("status", 
"statusgruppe"), class = "data.frame", row.names = c(NA, -78L 
)) 

de eso me gustaría hacer un histograma:

ggplot(data, aes(status))+ 
geom_histogram(aes(y=..density..), 
    binwidth=1, colour = "black", 
    fill="white")+ 
theme_bw()+ 
scale_x_continuous("Staus", breaks=c(min(data$status,na.rm=T), median(data$status, na.rm=T), max(data$status, na.rm=T)),labels=c("Low", "Middle", "High"))+ 
scale_y_continuous("Percent", formatter="percent") 

Ahora - Me gustaría que los contenedores que llevan colou acuerdo con el valor - por ejemplo, los contenedores con valor> 9 se ponen de color gris oscuro; todo lo demás debe ser gris claro.

He intentado con fill=statusgruppe, scale_fill_grey(breaks=9) etc. - pero no puedo hacer que funcione. ¿Algunas ideas?

Respuesta

11

Esperamos que esto debería empezar:

ggplot(data, aes(status, fill = ..x..))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_gradient(low = "black", high = "white") 

ggplot(data, aes(status, fill = ..x.. > 9))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_grey() 
+1

Gracias - Cambié el legendlabel como tal (para la posteridad) scale_fill_grey ("Nombre", breaks = c (FALSE, TRUE), etiquetas = c ("Esto", "Eso")). Otra pregunta: ¿es posible hacer algo como ..x ..> 7, ..x ..> 9 (si quiero tres categorías en lugar de solo dos?) – Andreas

+1

En ese caso, use 'cortar' . – hadley

+2

¡Gracias! - si alguien más está interesado, así es como lo hice: fill = cut (.. x .., c (1,6,10))), binwidth = 1, color = "black", ) + scale_fill_grey ( "name", breaks = c ("(1,6)", "(6,10]", NA), labels = c ("Low", "Midle", "High")) + – Andreas

0

Cómo sobre el uso fill=..count.. o fill=I(..count..>9) justo después y=..density..? Tienes que jugar un poco con el título y las etiquetas de la leyenda, pero te da la coloración correcta.

EDITAR:
Parece que he entendido mal su pregunta un poco. Si desea definir el color en función de la coordenada x, puede usar la variable automática ..x.. de manera similar.

+0

Gracias por las buenas ideas! sin embargo, no es lo que intento mostrar. Me gustaría que el color del bin-bar dependa del valor representado por ese bin (no el recuento). es decir, no contenedores con más de 9 recuentos, pero con valores superiores a 9. No creo que sea bueno para explicar esto: -/ Tal vez sean las etiquetas de mis ejes las que me confundan. Lo que me gustaría es colorear los contenedores a la derecha de la etiqueta "medio" – Andreas

0

¿Qué hay de scale_manual? Aquí está link al sitio de Hadley. He usado esta función para establecer un color de relleno apropiado para un diagrama de caja. No estoy seguro si va a trabajar con el histograma, aunque ...

Cuestiones relacionadas