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

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)


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

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)

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

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

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

También te puede interesar