Box plot por grupo en ggplot2

Datos de muestra

En este tutorial vamos a utilizar el siguiente data frame, cuya primera columna es una varible numérica y la segunda una variable categórica representando grupos.

# Sample dataset
set.seed(136)
df <- data.frame(y = rnorm(300),
                 grupo = sample(LETTERS[1:3],
                                size = 300,
                                replace = TRUE))

Box plot por grupo con geom_boxplot

Para crar un box plot agrupado en R necesitas pasar las variables a aes y usar el geom geom_boxplot como en el ejemplo siguiente.

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

# Box plot by grupo
ggplot(df, aes(x = grupo, y = y)) + 
  geom_boxplot()

Box plot por grupo en ggplot2

Agregando barras de error con stat_boxplot

Box plot por grupo con barras de error en ggplot2

Como ya habrás notado, los diagramas de caja en ggplot2 no añaden los líneas de las barras de error por defecto. Si quieres agregarlas usa stat_boxplot y establece geom = "errorbar". El ancho de las barras se puede personalizar con el argumento width.

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

# Box plot por grupo con barras de error
ggplot(df, aes(x = grupo, y = y)) + 
  stat_boxplot(geom = "errorbar", # Error bars
               width = 0.25) +    # Bars width
  geom_boxplot()

Box plot horizontal by grupo

Los diagramas de caja y bigotes también se pueden mostrar en modo horizontal. Para lograrlo puedes cambiar el orden de las variables dentro de aes o usar coord_flip, tal y como se muestra a continuación.

Opción 1: cambiar el orden de las variables.

Establece la variable categórica en el eje Y.

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

# Box plot horizontal en ggplot2
ggplot(df, aes(x = y, y = grupo)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.25) + 
  geom_boxplot()

Box plot por grupo horizontal en ggplot

Opción 2: usa coord_flip.

coord_flip invertirá los ejes, por lo que un box plot vertical se convertirá en horizontal y viceversa.

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

# Box plot horizontal
ggplot(df, aes(x = grupo, y = y)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.25) + 
  geom_boxplot() +
  coord_flip()

Box plot horizontal por grupo en ggplot2

Personalización de los colores

Box plot por grupo con paleta de colores personalizada en ggplot

Si pasas la variable categórica al argumento fill de aes, cada box plot se coloreará de un color y se mostrará una leyenda.

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

ggplot(df, aes(x = grupo, y = y, fill = grupo)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.25) + 
  geom_boxplot()

Los colores de los diagramas de caja y bigotes son completamente personalizables. En los siguientes ejemplos estamos estableciendo un color para cada grupo, cambiando el color del borde de las cajas y estableciendo el color de los atípicos como negro.

Box plot por grupo con paleta decolores personalizada en ggplot

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

# Colores de las cajas
cols <- c("#CFD8DC", "#90A4AE", "#455A64")

ggplot(df, aes(x = grupo, y = y, fill = grupo)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.25) + 
  geom_boxplot(alpha = 0.8,          # Transparencia
               colour = "#474747",   # Color del borde
               outlier.colour = 1) + # Color atípicos
  scale_fill_manual(values = cols)   # Colores de las cajas

Personalización de la leyenda

Cambiar el título

Puedes cambiar el título por defecto de la leyenda con la función guides.

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

ggplot(df, aes(x = grupo, y = y, fill = grupo)) + 
  stat_boxplot(geom = "errorbar", width = 0.25) + 
  geom_boxplot() +
  guides(fill = guide_legend(title = "Título"))

Cambiar el título de la leyenda de un gráfico de cajas en ggplot2

Cambiar las etiquetas

Los textos de la leyenda son los niveles de la variable categórica. Puedes sobrescribirlos con scale_fill_hue.

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

ggplot(df, aes(x = grupo, y = y, fill = grupo)) + 
  stat_boxplot(geom = "errorbar", width = 0.25) + 
  geom_boxplot() +
  scale_fill_hue(labels = c("G1", "G2", "G3"))

Cambiar las etiquetas de la leyenda de un box plot en ggplot2

Eliminar la leyenda

Si no quieres que se muestre la leyenda puedes eliminarla con theme(legend.position = "none").

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

ggplot(df, aes(x = grupo, y = y, fill = grupo)) + 
  stat_boxplot(geom = "errorbar", width = 0.25) + 
  geom_boxplot() +
  theme(legend.position = "none")

Borrar la leyenda de un boxplot en ggplot2

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
ggplot2

Elegant Graphics for Data Analysis

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar