boxplot() en R: Cómo hacer BoxGráficos en RStudio
⚡ Resumen inteligente
BoxLa función `plot` en R resume una distribución numérica mediante su mediana, cuartiles, bigotes y valores atípicos, utilizando `geom_boxplot()` de `ggplot2`. Este tutorial crea un diagrama de caja a partir del conjunto de datos de calidad del aire y añade capas de color, puntos, fluctuación, muescas y comparaciones entre grupos.

diagrama de caja() en R
diagrama de caja() en R Ayuda a visualizar la distribución de los datos por cuartil y a detectar la presencia de valores atípicos. Puedes utilizar el objeto geométrico geom_boxplot() de la biblioteca ggplot2 para dibujar un boxplot() en R.
Usaremos el conjunto de datos de calidad del aire para introducir la función boxplot() en R con ggplot. El conjunto de datos registra mediciones diarias de la calidad del aire en Nueva York desde mayo hasta septiembre de 1973 y contiene 153 observaciones. Usaremos las siguientes variables:
- Ozono: Variable numérica
- Viento: Variable numérica
- Mes: mayo a septiembre. variable numérica
Antes de dibujar uno, conviene saber exactamente qué representa cada parte de la caja.
Cómo leer un Box Gráfico: Cuartiles, rango intercuartílico y valores atípicos
Cada elemento de un diagrama de caja codifica un número del resumen de cinco números. Saber cuál es cuál convierte el gráfico de mera decoración en análisis.
- Bisagra inferior: El primer cuartil, Q1. El veinticinco por ciento de las observaciones se sitúan por debajo de él.
- Línea media: El segundo cuartil. Su posición dentro del recuadro revela asimetría: una línea desplazada hacia abajo significa que los datos están sesgados hacia la derecha.
- Bisagra superior: El tercer cuartil, Q3. El setenta y cinco por ciento de las observaciones se sitúan por debajo de él.
- Box altura: El rango intercuartil, IQR = Q3 – Q1, que contiene la mitad central de los datos y es la medida estándar robusta de dispersión.
- Bigotes: Se extienden hasta la observación más extrema, aún dentro de 1.5 veces el rango intercuartílico (RIC) de la bisagra más cercana. No son el mínimo ni el máximo.
- Puntos que van más allá de los bigotes: observaciones marcadas como valores atípicos según esa regla del rango intercuartílico de 1.5.
Dos advertencias. Primero, un valor atípico en este caso es una señal estadística, no un error: en una distribución asimétrica como la de la concentración de ozono, se esperan valores altos que no deben eliminarse. Segundo, un diagrama de caja oculta la forma de la distribución, por lo que dos grupos con cajas idénticas pueden tener datos subyacentes muy diferentes. Agregar puntos aleatorios, como se muestra a continuación, evita este problema.
Box Gráfico vs. Histograma vs. Gráfico de violín en R
Los tres gráficos describen una distribución numérica, pero cada uno revela algo que los otros ocultan.
| Criterios | Box Parcela | Histograma | Trama de violín |
|---|---|---|---|
| Shows | Mediana, cuartiles, valores atípicos | Frecuencia en cada intervalo | Curva de densidad completa |
| Revmúltiples picos | No | Sí: | Sí: |
| Marcar valores atípicos | Sí, explícitamente | Solo visualmente | No directamente |
| Comparando muchos grupos | Excelente | Torpe | Bueno |
| Necesita una opción de ajuste | No | Sí, recuento de contenedores | Sí, ancho de banda |
| objeto ggplot2 | geom_boxplot() | histograma geométrico() | geom_violín() |
Una solución de compromiso común es dibujar un diagrama de violín con un diagrama de caja estrecho en su interior, lo que mantiene la forma de densidad y el resumen de cuartiles en un solo gráfico. Véase el Tutorial sobre histogramas para la parte de agrupamiento de la comparación.
Crear Box Parcela
Antes de comenzar a crear su primer boxplot() en R, debe manipular los datos de la siguiente manera:
- Paso 1: importar los datos
- Paso 2: elimine las variables innecesarias
- Paso 3: Convertir el mes en un factor ordenado
- Paso 4: Crea una nueva variable categórica dividiendo cada mes en tres partes: Inicio, Medio y Fin.
- Paso 5: eliminar las observaciones faltantes
Todos estos pasos se realizan con dplyr y el operador de canalización %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Una buena práctica es comprobar la estructura de los datos con la función vislumbrar().
glimpse(data_air)
Salida:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
Tanto Ozone como Solar.R contienen valores NA. Dado que geom_boxplot() los descartaría silenciosamente y mostraría una advertencia, es más conveniente eliminarlos explícitamente.
# Step 5
data_air_nona <-data_air %>% na.omit()
Diagrama de caja básico
Ahora, represente gráficamente la distribución del ozono por mes.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code Explicación
- Guarde el gráfico para su uso posterior.
- box_plot: el gráfico base se almacena en el objeto box_plot, lo que permite agregar capas posteriormente sin repetir toda la llamada.
- Añade el objeto geométrico
- Pasa el conjunto de datos data_air_nona a ggplot boxplot.
- Dentro del argumento aes(), agrega el eje x y el eje y.
- El signo + significa que quieres que R siga leyendo el código. Hace que el código sea más legible al dividirlo.
- Utilice geom_boxplot() para crear un diagrama de caja
Salida:
Cambiar de lado del gráfico
Puedes voltear el lado del gráfico.
box_plot +
geom_boxplot()+
coord_flip()
Code Explicación
- box_plot: utiliza el gráfico que ha almacenado. Evita tener que reescribir todos los códigos cada vez que agrega nueva información al gráfico.
- geom_boxplot(): dibuja las cajas y los bigotes
- coord_flip(): Voltear el lado del gráfico
Salida:
Cambiar el color del valor atípico
Puede cambiar el color, la forma y el tamaño de los valores atípicos.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Explicación
- outlier.color=”red”: controla el color de los valores atípicos
- outlier.shape=2: cambia la forma del valor atípico. 2 se refiere al triángulo
- outlier.size=3: Cambia el tamaño del triángulo. Los números más grandes dibujan marcadores más grandes.
Salida:
Agregar una estadística resumida
Puedes superponer una estadística descriptiva, como la media del grupo, que el diagrama de caja en sí no muestra.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Explicación
- La función stat_summary() agrega una estadística calculada encima del diagrama de caja.
- El argumento `fun` controla qué estadística se devuelve. En este caso, es la media. Cabe destacar que el código antiguo utiliza `fun.y`, que ggplot2 dejó de usar en la versión 3.3.0.
- Nota: Hay otras estadísticas disponibles, como mínima y máxima. Se puede exhibir más de una estadística en un mismo gráfico.
- geom = “punto”: Traza el promedio con un punto
- size=3: Tamaño del punto
- color =”steelblue”: Color de los puntos
Salida:
Box Trazar con puntos
A continuación, añade una capa de diagrama de puntos sobre las cajas. Cada punto representa una observación individual, lo que permite visualizar el tamaño de la muestra detrás de cada caja.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Explicación
- geom_dotplot() dibuja un punto por observación, apilados dentro de cada intervalo.
- binaxis='y': cambia la posición de los puntos a lo largo del eje y. Por defecto, eje x
- dotsize=1: Tamaño de los puntos
- stackdir=’center’: Forma de apilar los puntos: Cuatro valores:
- “arriba” (predeterminado),
- "abajo"
- "centro"
- “centrotodo”
Salida:
Control Estético de la Box Parcela
Cambiar el color de la caja
Puedes cambiar los colores del grupo.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Explicación
- Los colores de los grupos se controlan en el mapa aes().pingPuedes usar color= Mes para cambiar el color del diagrama de caja y bigotes según los meses.
Salida:
Box trama con múltiples grupos
También es posible agregar varios grupos. Podrás visualizar la diferencia en la calidad del aire según el día de la medida.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Explicación
- El mapa aes()ping del objeto geométrico controla los grupos a mostrar (esta variable tiene que ser un factor)
- aes(fill= day_cat) permite crear tres casillas para cada mes en el eje x
Salida:
Box Trazar con puntos nerviosos
Otra forma de mostrar observaciones individuales es mediante puntos aleatorios. El uso de puntos aleatorios es la opción habitual cuando un eje x categórico provoca que muchos puntos se sitúen en la misma posición.
Este método evita la superposiciónping de los datos discretos.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Explicación
- geom_jitter() agrega un pequeño desplazamiento aleatorio a cada punto para que se superpongan.ping Los valores se hacen visibles.
- forma=15 cambia la forma de los puntos. 15 representa los cuadrados
- color = “steelblue”: Cambia el color del punto
- position = position_jitter(width = 0.21): controla cuánto se desplazan los puntos lateralmente, medido en unidades del eje x. El valor predeterminado es el 40 por ciento del espacio entre categorías.
Salida:
Puedes ver la diferencia entre el primer gráfico con el método de jitter y el segundo con el método de puntos.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Mellado Box Parcela
Una característica interesante de geom_boxplot() es la función de diagrama de caja con muescas de R. El diagrama de caja con muescas estrecha el cuadro alrededor de la mediana. El objetivo principal de un diagrama de caja con muescas es comparar la significancia de la mediana entre grupos. Hay pruebas sólidas de que dos grupos tienen medianas diferentes cuando las muescas no se superponen. Una muesca se calcula de la siguiente manera:
Aquí, IQR representa el rango intercuartil y n es el número de observaciones en el grupo. La muesca abarca aproximadamente el intervalo de confianza del 95 % de la mediana.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Explicación
- geom_boxplot(notch = TRUE): dibuja el diagrama de caja con muescas alrededor de la mediana.
Salida:
Cómo agregar títulos, etiquetas y colores personalizados a un Box Gráfico en R
Los gráficos anteriores utilizan la configuración predeterminada de ggplot2, que toma los nombres de las variables directamente del marco de datos. Un gráfico publicable necesita etiquetas legibles y una paleta de colores bien definida.
Títulos y etiquetas de los ejes. Una llamada a labs() establece cada elemento de texto:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Elige tus propios colores. Utilice scale_fill_manual() cuando fill se mapea dentro de aes(), y scale_colour_manual() cuando colour es:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
La leyenda está desactivada aquí porque el eje x ya nombra cada mes, por lo que repetirla desperdiciaría espacio.
Reordenando las cajas. Los niveles de los factores determinan el orden en el eje. Dado que Mes se creó como un factor ordenado, ya se lee cronológicamente. Para un factor no ordenado, ordene por la mediana:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Guardando el gráfico. ggsave() guarda el último gráfico en el disco con una resolución que usted controla:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Gráfico en R: Code Referencias
La tabla que aparece a continuación enumera la llamada a ggplot2 para cada variante de diagrama de caja que se ha tratado anteriormente:
| Objetivo | Code |
|---|---|
| Diagrama de caja básico |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Invierte la orientación |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Diagrama de caja con muescas |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box trama con puntos nerviosos |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Colorea por grupo |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Varios grupos por categoría |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Sumar la media del grupo |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
También verifique: Tutorial de R para principiantes: aprenda el lenguaje de programación R











