2020-12-01

Mostrar las áreas de densidad deseadas con stat_density_2d en ggplot2

Title

Problema

Tenemos el siguiente diagrama de dispersión para dos variables categóricas.

Cuando creamos un gráfico de densidad en 2D, obtenemos varios contornos de densidad. Queremos controlar precisamente el número de contornos.

library(ggplot2)
set.seed(123)
plot_data <-
  data.frame(
    X = c(rnorm(300, 3, 2.5), rnorm(150, 7, 2)),
    Y = c(rnorm(300, 6, 2.5), rnorm(150, 2, 2)),
    Label = c(rep('A', 300), rep('B', 150))
  )

ggplot(plot_data, aes(X, Y, colour = Label)) + geom_point()
ggplot(plot_data, aes(X, Y)) +
  stat_density_2d(geom = "polygon", aes(alpha = ..level.., fill = Label))

Solución

  • Opción 1
  • Añadiendo stat_density_2d con el argumento bins (número de contornos) evitamos una sobrecagarda de información, controlamos y centramos la atención en un número concreto de contornos de densidad.

    ggplot(plot_data, aes(X, Y, group = Label)) +
      stat_density_2d(geom = "polygon",
                      aes(alpha = ..level.., fill = Label),
                      bins = 4) 
    
  • Opción 2
  • Asignando manualmente los colores, especificando NA para aquellos niveles que no queremos mostrar. La principal desventaja es que necesitamos saber por adelantado el número de valores que scale_fill_manual necesita. En nuestro ejemplo, necesitamos especificar 7 valores en la escala manual.

    ggplot(plot_data, aes(X, Y, group = Label)) +
      stat_density_2d(geom = "polygon", aes(fill = as.factor(..level..))) +
      scale_fill_manual(values = c(NA, NA, NA, "#BDD7E7", "#6BAED6", "#3182BD", "#08519C"))
    

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos