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()
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 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()
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")
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..))
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()
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")
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()
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()
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)
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")
Á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")
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