Datos de muestra

El siguiente data frame contiene tres distribuciones normales con diferente media y desviación típica separadas por grupo. Estos datos serán usados en todos los ejemplos de este tutorial.

# Datos
set.seed(5)
x <- c(rnorm(200, mean = -2, 1.5),
       rnorm(200, mean = 0, sd = 1),
       rnorm(200, mean = 2, 1.5))
grupo <- c(rep("A", 200), rep("B", 200), rep("C", 200))
df <- data.frame(x, grupo)

Gráfico de densidad por grupo con geom_density

Para crear un gráfico de densidad por grupo en ggplot necesitas pasar la variable numérica y especificar la variable categórica en el argumento color (o colour) dentro de aes y usar la función geom_density.

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

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x, colour = grupo)) +
  geom_density()

Gráfico de densidad por grupo en ggplot2

La paleta de colores por defecto para las líneas se puede personalizar con scale_color_manual (o scale_color_brewer, por ejemplo). También puedes cambiar el ancho y el tipo de línea de las curvas lwd y linetype, respectivamente.

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

cols <- c("#F76D5E", "#FFFFBF", "#72D8FF")

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x, colour = grupo)) +
  geom_density(lwd = 1.2, linetype = 1) + 
  scale_color_manual(values = cols)

Cambiar los colores de las curvas de densidad en ggplot

Colorear las áreas bajo las curvas de las densidades

Colorear las áreas bajo las curvas de densidad en ggplot2

Si pasas también la variable categórica a fill dentro de aes las áreas se colorearán. Ten en cuenta que puedes eliminar colour = grupo o establecer el color que quieras si no quieres colorear las líneas por grupo.

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

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x, colour = grupo, fill = grupo)) +
  geom_density()

Gráfico de densidad con transparencia en ggplot2

Transparencia y personalización de los colores

Puedes modificar la transparencia de las áreas con el argumento alpha de geom_density y establecer los colores que quieras con scale_fill_manual.

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

cols <- c("#F76D5E", "#FFFFBF", "#72D8FF")

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.7) + 
  scale_fill_manual(values = cols)

Gráfico de comparación de densidades en ggplot2 con colores personalizados

Eliminar las líneas

Si quieres eliminar las líneas y mostrar solo el área puedes pasar color = NA dentro de geom_density.

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

cols <- c("#F76D5E", "#FFFFBF", "#72D8FF")

# Áreas de las densidades sin líneas
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.8, color = NA) + 
  scale_fill_manual(values = cols)

Personalización de la leyenda

Título

El título por defecto (el nombre de la variable categórica) se puede personalizar con el siguiente código.

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

# Gráfico de densidades en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density() + 
  guides(fill = guide_legend(title = "Título"))

Título de la leyenda de un gráfico de densidad en ggplot2

Etiquetas

También puedes agregar etiquetas personalizadas si no quieres usar los nombres de la variable categórica. Ten en cuenta que puedes usar scale_fill_hue si solo quieres cambiar las etiquetas o usar el argumento labels de scale_fill_manual si también quieres cambiar los colores de las áreas.

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

# Personalizar las etiquetas
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density() + 
  scale_fill_hue(labels = c("G1", "G2", "G3"))

Etiquetas de la leyenda de un gráfico de densidad en ggplot2

Eliminar la leyenda

Si quieres deshacerte de la leyenda, que se crea por defecto, puedes cambiar su posición a "none".

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

# Gráfico de densidades en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density() + 
  theme(legend.position = "none")

Gráfico de densidad por grupo en ggplot2 sin leyenda

También te puede interesar