2012-05-29 7 views
31

Probablemente haya una solución muy fácil a mi problema, pero no pude encontrar una respuesta satisfactoria en línea.Agregue color al diagrama de caja - "Error de valor continuo proporcionado a la balanza discreta"

con el siguiente comando pude crear el gráfico siguiente diagrama de caja y la cubrirás de los puntos de datos individuales:

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    geom_point(aes(color = Age)) 

Hay varias cosas que me gustaría añadir/cambiar:

1. Cambiar el color de línea y/o relleno de cada diagrama de caja (dependiendo de la "edad") usando 6 colores diferentes, de izquierda a derecha:

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00") 

Probé

ggplot(data = MYdata, aes(Age, Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

pero resulta en un error "Continuous value supplied to discrete scale".

2. Cambiar el color de cada punto de datos (dependiendo de la "edad") utilizando 6 diferentes colores de izquierda a derecha:

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00") 

he intentado:

ggplot(data = MYdata, aes(Age, Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    geom_point(aes(color = Age)) + 
    scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

pero también resulta en un error:

Continuous value supplied to discrete scale

3. Cambie el texto en la leyenda a "0 mes", "1 mes", "3 meses", "6 meses", "9 meses", "12 meses"

Respuesta

48

En primer lugar, proporcionar datos de muestra ayuda. Como no lo hizo, aquí hay algunos:

MYdata <- data.frame(Age = rep(c(0,1,3,6,9,12), each=20), 
        Richness = rnorm(120, 10000, 2500)) 

Las partes 1 y 2 tienen el mismo problema. Age es una variable continua, pero está intentando usarla en una escala discreta (especificando el color para valores específicos de edad). En general, una escala mapea la variable a lo visual; para una edad continua, hay un color correspondiente para cada valor de edad posible, no solo los que aparecen en sus datos. Sin embargo, puede tratar simultáneamente la edad como una variable categórica (factor) para algunas de las características estéticas. Para la tercera parte de su pregunta, dentro de la descripción de la balanza, puede definir etiquetas específicas correspondientes a pausas específicas en la escala. Poniendo todo esto junto (y añadiendo algo para darle el eje x la etiqueta más a lo que usted tiene en el ejemplo):

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(fill=factor(Age))) + 
    geom_point(aes(color = factor(Age))) + 
    scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) + 
    scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) + 
    scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

enter image description here

Con esta combinación de colores, los puntos que caen dentro del diagrama de caja son no visible (ya que son del mismo color que el relleno del diagrama de caja). Tal vez dejar el hueco de la caja y dibujar sus líneas en el color sería mejor.

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(colour=factor(Age)), fill=NA) + 
    geom_point(aes(color = factor(Age))) + 
    scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) + 
    scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

enter image description here

Por último, considere si realmente necesita para dar color a cada edad diferente, ya que están bien definidos por el eje X ya.

+1

¡Muchas gracias, Brian! Realmente no sé (todavía) cómo generar un conjunto de datos aleatorios en R. ¡Gracias por tomar esto de todos modos! Tengo una pregunta de seguimiento basada en su sugerencia para mantener los cuadros en blanco. ¿Cómo puedo cambiar el color de LINE de cada cuadro (por ejemplo, a gris)? Cambié el color de relleno con geom_boxplot (aes (color = factor (Age)), fill = "gray80"). Luego intenté scale_colour_manual (breaks = c ("0", "1", "3", "6", "9", "12"), values ​​= c ("gray80", "gray80", "gray80", " gray80 "," gray80 "," gray80 ")) pero luego los puntos de datos también se volvieron grises. Por supuesto, me gustaría mantener los puntos coloreados. – Dalmuti71

+1

'geom_boxplot (aes (position = factor (Age)), color =" gray ", fill = NA)' o 'geom_boxplot (aes (group = factor (Age)), color =" gray ", fill = NA)' –

+0

Gracias, Sandy! Solo para mi propio entendimiento: ¿qué hace "position = factor (Age)" o "group = factor (Age)" para poder determinar el color de la línea? – Dalmuti71

Cuestiones relacionadas