Libraries

library(plotly)
## Warning: package 'plotly' was built under R version 4.2.3
## Loading required package: ggplot2
## 
## 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

7 2D frequencies

7.1 Rectangular binning in plotly.js

El paquete plotly proporciona dos funciones para mostrar intervalos rectangulares en visualizaciones 2D: add_heatmap() y add_histogram2d(). Para datos numéricos, la función add_heatmap() es similar a la función add_bars() en 2D (los intervalos deben calcularse previamente), mientras que la función add_histogram2d() es similar a la función add_histogram() en 2D (los intervalos pueden calcularse en el navegador). La función add_histogram2d() es recomendada para fines exploratorios ya que no se tiene que pensar en cómo realizar el binning. Esta función también proporciona un atributo zsmooth para aumentar eficazmente el número de bins, y atributos nbinsx/nbinsy para establecer el número de bins en las direcciones x e/y. La figura 7.1 compara tres usos diferentes de add_histogram(): (1) el algoritmo de binning predeterminado de plotly.js, (2) el predeterminado más suavizado y (3) estableciendo el número de bins en las direcciones x e y. También se menciona que los contornos rellenos, en lugar de bins, se pueden utilizar en cualquiera de estos casos mediante el uso de add_histogram2dcontour() en lugar de add_histogram2d().

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 Rectangular binning in R

En el capítulo “Bars & histograms” se utiliza el paquete plotly en R para crear visualizaciones de intervalos rectangulares, ya sea para datos numéricos o categóricos. Se mencionan dos funciones principales: add_heatmap() y add_histogram2d(), y se recomienda utilizar la última para propósitos exploratorios debido a su capacidad para calcular los intervalos de manera automática. También se compara el uso de diferentes algoritmos de binning para add_histogram2d(). En cuanto a la estimación de densidades kernel 2D, se utiliza la función kde2d() del paquete MASS y se explica su utilidad para mostrar resultados como un mapa de calor utilizando 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 Categorical axes

Las funciones add_histogram2d(), add_histogram2dcontour() y add_heatmap() pueden usarse con ejes categóricos. Así, add_histogram2d() puede utilizarse para mostrar tablas de contingencia de 2 vías, pero se recomienda crear gráficos de barras agrupadas en su lugar para facilitar la comparación. La función add_heatmap() puede ser útil para los ejes categóricos ya que nos permite mostrar cualquier cantidad a lo largo del eje z (color). La figura 7.3 muestra un ejemplo de cómo se puede utilizar add_heatmap() para mostrar una matriz de correlación. También se puede ajustar la escala de colores con la función colorbar() para reflejar el rango de correlaciones 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))