geom_jitter
Agregar observaciones con ruido aleatorio (un stripchart) a un gráfico de cajas en ggplot2 es muy útil para mostrar la distribución subyacente de los datos. Para ello tendrás que usar geom_jitter.
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot() +
geom_jitter()

Una buena práctica es eliminar los atípicos con outlier.shape = NA, ya que con geom_jitter también se mostrarán.
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter()

Recuerda que puedes rotar los ejes con coord_flip o intercambiando las variables dentro de aes.
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter() +
coord_flip()

Las observaciones con ruido aleatorio se pueden personalizar de varias maneras. Puedes cambiar la cantidad de ruido con width, el color de los puntos, su forma o su tamaño, como se muestra en los siguientes ejemplos.

Ancho
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(width = 0.2)

Color
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(colour = 2)

Forma y tamaño
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
df <- data.frame(y)
# Box plot
ggplot(df, aes(x = "", y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(shape = 17, size = 2)
Si tienes una variable categórica que represente grupos puedes crear un gráfico de cajas por grupo y añadir las observaciones a cada grupo y personalizar su color, tamaño y forma.
Observaciones por grupo
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
grupo <- sample(LETTERS[1:3], size = 200,
replace = TRUE)
df <- data.frame(y, grupo)
# Box plot por grupo con observaciones
ggplot(df, aes(x = grupo, y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter()

Color de los puntos
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
grupo <- sample(LETTERS[1:3], size = 200,
replace = TRUE)
df <- data.frame(y, grupo)
# Box plot por grupo con observaciones
ggplot(df, aes(x = grupo, y = y)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(colour = 2)

Color de los puntos por grupo
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
grupo <- sample(LETTERS[1:3], size = 200,
replace = TRUE)
df <- data.frame(y, grupo)
# Box plot por grupo con observaciones
ggplot(df, aes(x = grupo, y = y, colour = grupo)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter()

Forma por grupo
# install.packages("ggplot2")
library(ggplot2)
# Datos
set.seed(8)
y <- rnorm(200)
grupo <- sample(LETTERS[1:3],
size = 200,
replace = TRUE)
df <- data.frame(y, grupo)
# Box plot por grupo con observaciones
ggplot(df, aes(x = grupo, y = y,
colour = grupo,
shape = grupo)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter()

También te puede interesar