2017-01-16

Destacar subconjunto de puntos en un diagrama de dispersión con ggplot2

Problema

Deseamos resaltar un determinado número de puntos de un diagrama de dispersión. En nuestro ejemplo, usamos el conjunto de datos mpg (Fuel economy data from 1999 and 2008 for 38 popular models of car). Queremos destacar en rojo y con un tamaño mayor, aquellos cuyo displ (engine displacement) sea mayor de 5 y hwy (highway miles per gallon) mayor de 20.

Solución

  • Alternativa 1
  • Añadimos la condición lógica para ambos atributos, color y tamaño del punto dentro de geom_point. Después cambiamos manualmente ambos con scale_colour_manual y scale_size_manual. Finalmente eliminamos la leyenda.

    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy, colour = displ > 5 & hwy > 20, size = displ > 5 & hwy > 20)) + 
      scale_colour_manual(values = c("black", "red")) + 
      scale_size_manual(values =c(1.5, 3))+
      theme(legend.position = "none")
    
  • Alternativa 2
  • Creamos dos capas de puntos con geom_point. La primera en negro incluye todos los puntos. La segunda en rojo y con un tamaño de punto mayor para el subconjunto del data frame deseado.

    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy), colour= "black") +
      geom_point(data = subset(mpg, displ > 5 & hwy > 20), aes(x = displ, y = hwy), colour= "red", size = 3)
     
    En ggplot2 las capas se añaden en el orden especificado en el código. Si alteráramos el orden de las dos capas (geom_point), obtendríamos el siguiente resultado.

    ggplot(data = mpg) + 
       geom_point(data = subset(mpg, displ > 5 & hwy > 20), aes(x = displ, y = hwy), colour= "red", size = 3) +
       geom_point(mapping = aes(x = displ, y = hwy), colour= "black")
     

    Entradas relacionadas

    No hay comentarios:

    Publicar un comentario

    Nube de datos