Agregar color a boxplot-error" Valor continuo suministrado a escala discreta"


Probablemente haya una solución muy fácil a mi problema, pero no pude encontrar una respuesta satisfactoria en línea.

Usando el siguiente comando pude crear el siguiente gráfico boxplot y superponerlo con 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. Cambie el color de la línea y/o el relleno de cada gráfica de caja (dependiendo de la "Edad") usando 6 colores diferentes de izquierda a derecha:

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

Lo intenté

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. Cambie el color de cada punto de datos (dependiendo de la "Edad") usando 6 colores diferentes de izquierda a derecha:

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

Lo intenté:

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:

Valor continuo suministrado a escala discreta

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

Author: zx8754, 2012-05-29

1 answers

Primero, proporcionar datos de muestra ayudaría. Ya que no lo hiciste, 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 se derivan del mismo problema. Age es una variable continua, pero está tratando de usarla en una escala discreta (especificando el color para valores específicos de edad). En general, una escala asigna la variable a la visual; para una edad continua, hay un color correspondiente para cada valor posible de edad, no solo los que aparecen en sus datos. Sin embargo, usted puede simultáneamente tratar la edad como una variable categórica (factor) para algunas de las estéticas. Para la tercera parte de su pregunta, dentro de la descripción de la escala, puede definir etiquetas específicas correspondientes a saltos específicos en la escala. Juntando todo esto (y agregando algo para darte el eje x etiquetado más como lo que tienes 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"))

introduzca la descripción de la imagen aquí

Con este esquema de color, los puntos que caen dentro de la boxplot no son visibles (ya que son los mismos color como relleno de la gráfica de caja). Quizás sería mejor dejar la gráfica hueca y dibujar sus líneas en el color.

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"))

introduzca la descripción de la imagen aquí

Finalmente, considere si realmente necesita colorear cada edad de manera diferente, ya que ya están bien definidas por el eje x.

 50
Author: Brian Diggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-29 21:03:56