Librería

ggridges

Autor principal

Claus O. Wilke

Conjunto de datos de muestra

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")]

Gráficos ridgeline con 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()

Ridgeline básico en ggplot2

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()

La función 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)

Recortar las colas de las distribuciones de un gráfico ridgeline en ggplot2

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)

Cambiar la escala de los ridgelines en ggplot2

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)

Ridgeline binline

Personalización del color

Gráfico ridgeline con la función geom_density_ridges de ggridges

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 las líneas de las densidades de un gráfico ridgeline

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

Colorear las densidades del ridgeline por grupo

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()

Colores cíclicos en ggridges con scale_fill_cyclical y scale_color_cyclical

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))

Coloreando los ridgelines con un degradado usando ggridges

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 del rigeline en ggplot2

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()

Agregando cuantiles y probabilidades con 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)

Añadiendo cuantiles a los ridgelines en ggplot2

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)

Usando la función stat_density_ridges de ggridges

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))

Especificar cuantos cuantiles mostrar en el ridgeline

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 = "")

Coloreando los cuantiles con calc_ecdf

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]"))

Resaltando las colas de las distribuciones del ridgeline

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

Mostrando las probabilidades de las colas con un degradado en ggridges

También te puede interesar