6 BOXPLOTS

La función add_boxplot() requiere una variable numérica y se puede utilizar para generar boxplots correctamente orientados, independientemente de si la variable numérica se coloca en el eje x o y. Además, en el eje ortogonal al eje numérico, se puede proporcionar una variable discreta para la condicionamiento o se puede suministrar un solo valor para nombrar la categoría del eje. En general, los boxplots son una herramienta útil para explorar y comparar distribuciones numéricas, pero es importante considerar la complejidad de la distribución y elegir un método de visualización apropiado.

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 dividir los datos en más de una categoría, puede utilizar la interacción de múltiples variables discretas en el eje discreto y colorear la variable anidada, por ejemplo, utilizando la claridad y el corte del diamante. Alternativamente, puede utilizar una pantalla de trellis.

plot_ly(diamonds, x = ~price, y = ~interaction(clarity, cut)) %>%
  add_boxplot(color = ~clarity) %>%
  layout(yaxis = list(title = ""))

Ordenar los boxplots por una variable significativa, como el precio mediano, puede ser beneficioso. Ciertas disposiciones destacan que los diamantes con una calificación de corte de “SI2” tienen, en promedio, el precio 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 = ""))

Al igual que add_histogram(), add_boxplot() también envía los datos sin procesar al navegador y depende de plotly.js para calcular las estadísticas resumidas. Sin embargo, a diferencia de los histogramas, plotly.js actualmente no admite el uso de estadísticas precalculadas para boxplots.

7 FRECUENCIAS 2D

7,1 Agrupamiento rectangular en plotly.js

El autor recomienda el uso de la función add_histogram2d() en el paquete Plotly para mostrar histogramas rectangulares en el análisis exploratorio de datos. Esta función es un análogo 2D de add_histogram() y permite la computación de los histogramas en el navegador. Incluye varios atributos para ajustar el número de histogramas en las direcciones x e y, así como un atributo zsmooth para aumentar el número de histogramas mediante una interpolación bilineal. Además, la función add_histogram2dcontour() se puede utilizar para mostrar contornos rellenos en lugar de histogramas. Se comparan diferentes usos de add_histogram(), incluyendo el algoritmo de histograma predeterminado, el predeterminado con suavizado y estableciendo el número de histogramas en las direcciones x e y.

p <- plot_ly(diamonds, x = ~log(carat), y = ~log(price))
subplot(
  add_histogram2d(p) %>%
    colorbar(title = "default") %>%
    layout(xaxis = list(title = "default")),
  add_histogram2d(p, zsmooth = "best") %>%
    colorbar(title = "zsmooth") %>%
    layout(xaxis = list(title = "zsmooth")),
  add_histogram2d(p, nbinsx = 60, nbinsy = 60) %>%
    colorbar(title = "nbins") %>%
    layout(xaxis = list(title = "nbins")),
  shareY = TRUE, titleX = TRUE
)

7,2 Agrupamiento rectangular en R

La falta de investigación y herramientas computacionales para el análogo en 2D del histograma hace que sea difícil calcular el número “óptimo” de bins. La estimación de densidad kernel proporciona una alternativa útil que es más robusta a los cambios en la forma de distribución. La función kde2d() del paquete MASS proporciona una regla general bien respaldada para estimar la banda de una densidad de núcleo gaussiano. Los resultados se muestran como un mapa de calor usando la función add_heatmap().

kde_count <- function(x, y, ...) {
  kde <- MASS::kde2d(x, y, ...)
  df <- with(kde, setNames(expand.grid(x, y), c("x", "y")))
  # The 'z' returned by kde2d() is a proportion, 
  # but we can scale it to a count
  df$count <- with(kde, c(z) * length(x) * diff(x)[1] * diff(y)[1])
  data.frame(df)
}

kd <- with(diamonds, kde_count(log(carat), log(price), n = 30))
plot_ly(kd, x = ~x, y = ~y, z = ~count) %>% 
  add_heatmap() %>%
  colorbar(title = "Number of diamonds")

7,3 Ejes categóricos

Las funciones add_histogram2d(), add_histogram2dcontour() y add_heatmap() en el paquete Plotly admiten ejes categóricos. Si bien add_histogram2d() puede mostrar tablas de contingencia de dos vías, se recomienda crear gráficos de barras agrupadas para una comparación más fácil. Sin embargo, add_heatmap() es útil para mostrar cualquier cantidad a lo largo del eje z (color) para ejes categóricos. La función colorbar() se puede usar para expandir los límites de la escala de colores para mostrar el rango de valores posibles.

corr <- cor(dplyr::select_if(diamonds, is.numeric))
plot_ly(colors = "RdBu") %>%
  add_heatmap(x = rownames(corr), y = colnames(corr), z = corr) %>%
  colorbar(limits = c(-1, 1))

8 3D CHARTS

8,1 Marcadores

Al agregar un atributo z a la función plot_ly(), podemos crear visualizaciones en 3D. Esto nos permite utilizar todas las técnicas aprendidas para crear gráficos en 2D, como agregar marcadores, líneas y senderos a la visualización.

plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  add_markers(color = ~cyl)

8,2 Rutas

Para crear una ruta en 3D, se utiliza add_paths() de la misma manera que lo harías para una ruta en 2D, pero agrega una tercera variable z.

plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  add_paths(color = ~displ)

8,3 Lineas

La siguiente figura utiliza add_lines() en lugar de add_paths() para asegurarse de que los puntos estén conectados por el eje x en lugar del ordenamiento por fila.

plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  add_lines(color = ~displ)

Al igual que con las líneas no 3D, se pueden crear múltiples líneas especificando una variable de agrupación.

plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  group_by(cyl) %>%
  add_lines(color = ~displ)

8,4 Axes

En las visualizaciones 3D, los objetos de eje están definidos dentro de scene, que forma parte del diseño. Para establecer títulos de ejes o ajustar otras propiedades específicas del eje, se debe hacer a través de scene. Esto incluye establecer la relación de aspecto del eje o la configuración de cámara predeterminada.

plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  add_lines(color = ~displ) %>%
  layout(
    scene = list(
      xaxis = list(title = "MPG city"),
      yaxis = list(title = "MPG highway"),
      zaxis = list(title = "Number of cylinders")
    )
  )

8,5 Superficies

-add_surface() se utiliza para crear superficies 3D, y es similar a add_heatmap(). -Las superficies 3D se pueden crear sobre ejes categóricos x/y, pero debe haber un orden sensato para la interpolación. -Por lo general, las superficies 3D se utilizan para mostrar una región continua. -Si se proporciona una matriz numérica a z, no es necesario proporcionar los atributos x e y, pero si se proporcionan, la longitud de x debe coincidir con el número de columnas en la matriz y y debe coincidir con el número de filas.

x <- seq_len(nrow(volcano)) + 100
y <- seq_len(ncol(volcano)) + 500
plot_ly() %>% add_surface(x = ~x, y = ~y, z = ~volcano)