gráficos multinivel: sunburst y treemap

analisis
R
Author

Roberto Gil-Saura

Published

August 24, 2021

Hola de nuevo. Esta vez fue rápido. De nuevo por aquí. El siguiente post, siguiendo con la línea de simplicidad nos ayudará a conocer una funcionalidad del paquete highcharter que nos permite preparar los datos para una gráfico multinivel, que nosotros vamos a aplicar a la representación de un gráfico los NET y los literales desagrupados.

Volvemos a utilizar los datos de los dos últimos post. Muy sencillos.

pacman::p_load(highcharter
    ,DT
    ,dplyr
    ,expss)
df <-
     data.frame(
          id = seq(1:7),
          p56_1 = c(1, 2, 3, 3, 1, 7, 8),
          p56_2 = c(2, 3, 7, 5, 6, NA, 9),
          p56_3 = c(3, 4, NA, NA, NA, NA, 10)
     )

Mostramos el dataframe creado …

datatable(df)

tabla de datos

Etiquetamos ahora los datos que como bien sabes, vienen del proceso de codificación que se pudo ver en el anterior post.

var_lab(df$p56_1) <- 'Likes de la crema' #etiquetamos la variable
val_lab(df$p56_1) <- c(
     'Color azul' = 1,
     'Color verde' = 2,
     'Mar, playa' = 3,
     'Cielo' = 4,
     'Infancia' = 5,
     'Sol, luz' = 6,
     'Olor' = 7,
     'Densidad' = 8,
     'Capacidad de aplicación' = 9,
     'Absorción' = 10)

Y hacemos la tabla utilizando la librería expss. Mostramos su resultado.

tab <- df %>% 
     tab_cells('|'=unvr(mrset_f(p56_))) %>% 
     tab_total_row_position(total_row_position='none') %>%
     tab_stat_cases() %>% 
     tab_pivot()
as.datatable_widget(tab)

tabla de frecuencias

Nos trabajamos un poco el resultado para conseguir tener un dataframe con la información de los dos niveles: el NET y el literal desagrupado. Mostramos el objeto tab editado para que se aprdecie el cálculo de la variable group.

# convertimos la tabla en un dataframe
tab <- as.data.frame(tab)
# etiquetamos los nombres de las variables de ese dataframe
colnames(tab) <- c('label', 'freq')
# calculamos la variable de grupo
# rownames(tab) hace referencia al nº de fila en el dataframe
tab$group <- case_when(rownames(tab) %in% c(1,2) ~ 'COLOR',
                       rownames(tab) %in% c(3,4,6) ~ 'NATURALEZA',
                       rownames(tab) %in% c(5,7,8,9,10) ~ 'OTROS')
datatable(tab)

añadiendo la variable de nivel 1 o NET

# jerarquizamos los datos tal como los necesita el gráfico sunburst
# de Highcharter en el objeto dout
dout <- data_to_hierarchical(tab, c(group,label), freq)

Y aquí tenemos el resultado …

hchart(dout, type = "sunburst")

Gráfico multinivel o sunburnst

Y sin hacer nada más, también esta segunda forma de presentación …elt()

hchart(dout, type = "treemap") %>% 
    hc_tooltip(pointFormat = "<span  style='color: {series.color}'> {series.name} <b>{point.y}</b><br/></span>")

Gráfico multinivel o treemap

No hay más. Es así de simple, pero en los dos casos gráficos muy vistosos, como todos los que permite highcharter sobre la base de Highcharts.