La función geom_density_2d

Se puede crear un gráfico de contorno para una densidad en 2D usando la función geom_density_2d de ggplot2. Para ello solo es necesario pasarle un data frame e indicar dentro de aes cuáles son las variables x e y.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d()

Gráfico de contorno en R

Modificar el número de niveles

Es posible incrementar o disminuir el número de niveles con bins.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d(bins = 15)

Para más detalles se recomienda consultar ?geom_contour.

Gráfico de contorno con ggplot2

Gráfico de dispersión con curvas de nivel

También se pueden representar los puntos con geom_point y después usar geom_density_2d para añadir al gráfico de dispersión sus correspondientes curvas de nivel.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_point() + 
  geom_density_2d()

Diagrama de dispersión con contornos en ggplot2

Personalización de las líneas

Se pueden personalizar las líneas de contorno de diversas maneras. Al igual que en otro tipo de gráficos, es posible cambiar el color, el grosor o el tipo de línea.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d(color = "red")

Gráfico de densidad 2D en ggplot2

Color en función del nivel

Pasando ..level.. al argumento color de aes se colorearán las curvas en función del nivel. Así, se resaltarán las zonas de mayor densidad con colores más claros.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d(aes(color = ..level..))

Gráfico de contorno en R con el color en función del nivel

Cambiar la paleta de colores

Si las líneas se van a pintar en función del nivel, se puede cambiar el color por defecto por una paleta de colores continua. Por ejemplo, para usar la paleta viridis basta con añadir scale_color_viridis_c.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d(aes(color = ..level..)) +
  scale_color_viridis_c()

Gráfico de contorno paleta de color

Colorear el contour con stat_density_2d

Existe una función similar llamada stat_density_2d que permite cambiar el geom. Si estableces geom = "polygon" puedes colorear el contour como se muestra a continuación. Alternativamente puedes usar geom_density_2d_filled.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y, fill = ..level..)) +
  stat_density_2d(geom = "polygon")

Usando la función stat_density_2d para colorear un contour en ggplot2

La función geom_density_2d_filled

La función geom_density_2d_filled

Para representar los niveles mediante áreas en lugar de líneas se puede usar la función geom_density_2d_filled.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d_filled()

Gráfico de áreas de contorno en ggplot2

Paleta de colores

De nuevo, se pueden cambiar los colores de relleno usando una paleta de colores discreta como scale_fill_brewer o scale_fill_manual, esta última permite elegir los colores personalizados.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d_filled() +
  scale_fill_brewer()

Gráfico de áreas de contorno con paleta de colores

Transparencia

El argumento alpha permite modificar la transparencia de las áreas coloreadas.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d_filled(alpha = 0.75)

Densidad 2D áreas de contorno en ggplot2 con líneas

Líneas de contorno sobre áreas

También se pueden añadir las líneas de contorno sobre las áreas que delimitan.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d_filled() +
  geom_density_2d(colour = "black")

Diagrama de dispersión con áreas de contorno en ggplot2

Áreas y líneas de contorno sobre diagrama de puntos

Cabe destacar que también es posible añadir las áreas y curvas de nivel a un gráfico de dispersión. Para ello basta con fijar un valor de transparencia bajo.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_density_2d_filled(alpha = 0.4) +
  geom_density_2d(colour = "black")

Cambiar el título de la leyenda de un gráfico de contorno en ggplot2

Título de la leyenda

La leyenda de los gráficos de contorno también se puede personalizar. En el siguiente ejemplo se cambia el título de la leyenda.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(1)
df <- data.frame(x = rnorm(200), y = rnorm(200))

ggplot(df, aes(x = x, y = y)) +
  geom_density_2d_filled() +
  guides(fill = guide_legend(title = "Nivel"))

También te puede interesar