Box plot con observaciones con 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()

Box plot en ggplot2 con 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()

ggplot2 box plot of one variable with jittered points

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

Box plot horizontal con jitter en ggplot

Personalización de los puntos

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.

La función geom_jitter

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 de las observaciones del box plot de ggplot

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)

Tamaño y forma de las observaciones del box plot en ggplot2

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)

Box plot por grupo con puntos de datos

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

Box plot por grupo con observaciones en ggplot

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)

Gráfico de cajas por grupo con puntos de datos en ggplot

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

Box plot con observaciones coloreadas por grupo en ggplot2

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

Gráfico de cajas con observaciones con forma por grupo

También te puede interesar