library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(ggforce)
library(remotes)
library(htmltools)
library(ggmosaic)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Los boxplots codifican el resumen de cinco números de una variable numérica, y proporcionan una forma decente de comparar muchas distribuciones numéricas. La tarea visual de comparar múltiples boxplots es relativamente fácil (es decir, comparar la posición a lo largo de una escala común) en comparación con algunas alternativas comunes (por ejemplo, una visualización enrejada de histogramas, como 5.1), pero el boxplot es a veces inadecuado para capturar distribuciones complejas (por ejemplo, multimodales) (en este caso, un polígono de frecuencia, como la Figura 2.9 proporciona una buena alternativa). La función add_boxplot() requiere una variable numérica y garantiza que los gráficos de caja se orienten correctamente, independientemente de si la variable numérica se coloca en la escala x o y. Como muestra la Figura 6.1, en el eje ortogonal al eje numérico, puede proporcionar una variable discreta (para condicionar) o suministrar un único valor (para nombrar la categoría del eje).
p <- plot_ly(diamonds, y = ~price, color = I("black"),
alpha = 0.1, boxpoints = "suspectedoutliers")
p1 <- p %>% add_boxplot(x = "Overall")
p2 <- p %>% add_boxplot(x = ~cut)
subplot(
p1, p2, shareY = TRUE,
widths = c(0.2, 0.8), margin = 0
) %>% hide_legend()
Si desea particionar por más de una variable discreta, podría utilizar la interacción de esas variables con el eje discreto, y colorear por la variable anidada, como hace la Figura 6.2 con la claridad y talla del diamante. Otro enfoque sería utilizar una visualización enrejada, similar a la de la Figura 13.9.
plot_ly(diamonds, x = ~price, y = ~interaction(clarity, cut)) %>%
add_boxplot(color = ~clarity) %>%
layout(yaxis = list(title = ""))
También es útil ordenar los gráficos de caja según algo significativo, como el precio medio. La figura 6.3 presenta la misma información que la figura 6.2, pero ordena los gráficos de caja por su mediana, y deja claro de inmediato que los diamantes con talla “SI2” tienen el precio medio más alto.
d <- diamonds %>%
mutate(cc = interaction(clarity, cut))
# interaction levels sorted by median price
lvls <- d %>%
group_by(cc) %>%
summarise(m = median(price)) %>%
arrange(m) %>%
pull(cc)
plot_ly(d, x = ~price, y = ~factor(cc, lvls)) %>%
add_boxplot(color = ~clarity) %>%
layout(yaxis = list(title = ""))
Similar a add_histogram(), add_boxplot() envía los datos brutos al navegador, y permite a plotly.js calcular estadísticas de resumen. Desafortunadamente, plotly.js todavía no permite estadísticas precalculadas para boxplots.