Para este tutorial emplearemos una muestra del conjunto de datos diamonds
del paquete ggplot2
.
# install.packages("ggplot2")
library(ggplot2)
# Datos de muestra
df <- diamonds[1:100, c("color", "depth")]
geom_density_ridges
La función geom_density_ridges
del paquete ggridges
permite crear visualizaciones llamadas ridgelines o joy plots. Dada una variable numérica (depth
) y una categórica (color
) se calculará una estimación de la densidad de los datos y se mostrará para cada grupo.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges()
geom_density_ridges2
Ten en cuenta que existe una función equivalente llamada geom_density_ridges2
que usa polígonos cerrados para mostrar las densidades, por lo que también aparecerá una línea en la parte inferior de cada estimación.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges2()
Recortar las colas de las distribuciones
El argumento rel_min_height
de la función se puede usar para recortar las colas de las distribuciones. Tendrás que ajustar el valor dependiendo de tus datos.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges(rel_min_height = 0.005)
Escala
Además, el argumento scale
controla la escala de los ridgelines en referencia al espacio entre ellos.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges(scale = 3)
Alternativas
El argumento stat
se puede usar para selecionar la transformación estadística a ser usada.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges(stat = "binline",
bins = 20, draw_baseline = FALSE)
Color de fondo y transparencia
El color gris por defecto de los ridgelines se puede cambiar con el argumento fill
de la función geom_density_ridges
. Ten en cuenta que también puedes especificar un nivel de transparencia con alpha
.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges(fill = "lightblue", alpha = 0.5)
Color de los bordes
El argumento color
de la función controla el color de las líneas. Al igual que en otros gráficos también puedes cambiar el tipo de línea o el grosor.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
geom_density_ridges(fill = "white",
color = 4,
linetype = 1, # Tipo de línea
lwd = 0.5) # Grosor
Color por grupo
También puedes colorear las densidades en base a la variable categórica, pasándola al argumento fill
de aes
. La paleta de color se puede cambiar, por ejemplo, con scale_fill_manual
.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = color)) +
geom_density_ridges()
Escala de color cíclicas
Las funciones scale_fill_cyclical
y scale_color_cyclical
se pueden usar para agregar color de fondo y de borde de manera cícicla en las estimaciones de las densidades.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = color, color = color)) +
geom_density_ridges() +
scale_fill_cyclical(name = "Cycle", guide = "legend",
values = c("#99E6FF", "#4CA6FF")) +
scale_color_cyclical(name = "Cycle", guide = "legend",
values = c(1, 4))
Degradado
Puedes pasar stat(x)
o factor(stat(x))
al argumento fill
de aes
y usar geom_density_ridges_gradient
y una escala de color continua para colorear cada ridgeline con un degradado.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = stat(x))) +
geom_density_ridges_gradient() +
scale_fill_viridis_c(name = "Depth", option = "C")
Cambiar el tema
Ten en cuenta que también puedes cambiar el tema de ggplot2 para modificar la apariencia del gráfico. El paquete ggridges
proporciona el tema theme_ridges
.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = stat(x))) +
geom_density_ridges_gradient() +
scale_fill_viridis_c(name = "Depth", option = "C") +
coord_cartesian(clip = "off") + # Para evitar el recorte
theme_minimal()
stat_density_ridges
Si utilizas stat_density_ridges
en lugar de geom_density_ridges
y estableces el argumento quantile_lines
como TRUE
los cuantiles se mostrarán para cada densidad.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
stat_density_ridges(quantile_lines = TRUE, alpha = 0.75)
Número de cuantiles
El argumento quantiles
controla qué o cuántos cuantiles se muestran. Si pasas un número entero los datos se dividirán en dicho número de cuantiles iguales.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
stat_density_ridges(quantile_lines = TRUE, alpha = 0.75,
quantiles = 2)
Especificar los cuantiles
Si pasas un valor o un vector de valores entre 0 y 1 al argumento quantiles
esos cuantiles serán calculados y dibujados.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color)) +
stat_density_ridges(quantile_lines = TRUE, alpha = 0.75,
quantiles = c(0.05, 0.5, 0.95))
Color por cuantil
Pasando stat(quantile)
a fill
y estableciendo calc_ecdf
y geom = "density_ridges_gradient"
cada cuantil se coloreará de un color diferente. Ten en cuenta que si estableces quantile_lines = TRUE
se dibujarán las líneas verticales para cada cuantil.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = stat(quantile))) +
stat_density_ridges(quantile_lines = FALSE,
calc_ecdf = TRUE,
geom = "density_ridges_gradient") +
scale_fill_brewer(name = "")
Resaltar las colas de las distribuciones
El procedimiento descrito antes se puede usar para destacar las colas de las distribuciones.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = depth, y = color, fill = stat(quantile))) +
stat_density_ridges(quantile_lines = TRUE,
calc_ecdf = TRUE,
geom = "density_ridges_gradient",
quantiles = c(0.05, 0.95)) +
scale_fill_manual(name = "Prob.", values = c("#E2FFF2", "white", "#B0E0E6"),
labels = c("(0, 5%]", "(5%, 95%]", "(95%, 1]"))
Probabilidades de las colas como degradado
De manera similar, usando stat(ecdf)
es posible añadir un degradado a las densidades mostrando las probabilidades de las colas.
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(depth, y = color,
fill = 0.5 - abs(0.5 - stat(ecdf)))) +
stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf = TRUE) +
scale_fill_gradient(low = "white", high = "#87CEFF",
name = "Prob colas.")
También te puede interesar