Cómo hacer un gráfico de columnas por grupos en highcharter

Tras ver cómo hacer un gráfico de columnas en highcharter, hoy aprenderemos a hacer un gráfico de columnas por grupos en highcharter.
El tema de los gráficos lo puedes encontrar en la entrada sobre cómo crear temas en highcharter y configurarlo al inicio de la sesión así:
library(highcharter)
options(highcharter.theme = elartedeldato_theme)
Cuando queremos representar un gráfico de columnas por grupos, podemos o bien agrupar las columnas en las etiquetas del eje o bien apilar las categorías por grupo (o viceversa). En este post nos centraremos en la primera opción.
Cómo hacer un gráfico de columnas por grupos en highcharter
En primer lugar generaremos los datos de entrada. Se trata de un dataset con una variable categórica, una numérica, que podría indicar por ejemplo la frecuencia de cada categoría, y una etiqueta de grupo asociada a cada valor.
df_cat_grupos <- dplyr::tribble(
~x, ~y, ~grupo,
"A", 10, "G1",
"B", 23, "G1",
"C", 24, "G1",
"A", 7, "G2",
"B", 16, "G2",
"C", 13, "G2",
"A", 9, "G3",
"B", 21, "G3",
"C", 20, "G3"
)
df_cat_grupos
## # A tibble: 9 × 3
## x y grupo
## <chr> <dbl> <chr>
## 1 A 10 G1
## 2 B 23 G1
## 3 C 24 G1
## 4 A 7 G2
## 5 B 16 G2
## 6 C 13 G2
## 7 A 9 G3
## 8 B 21 G3
## 9 C 20 G3
Construimos el gráfico indicando el tipo correspondiente y la variable grupo en la estética.
library(highcharter)
hchart(
df_cat_grupos,
type = "column",
hcaes(x = x, y = y, group = grupo)
) |>
hc_title(text = "<b>Gráfico de columnas por grupos</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com") -> hc
hc
Cómo agrupar las columnas de un gráfico de highcharter
Para agrupar las columnas de un gráfico de highcharter y mostrar las etiquetas agrupadas, necesitamos un plugin. En highcharter, se pueden añadir plugins a través de la función hc_add_dependency()
.
En este caso, el nombre del plugin para agrupar las etiquetas del eje es plugins/grouped-categories.js
pero existen muchos más que puedes consultar en la web de Highcharter creada por Joshua Kunst.
Para llevar a cabo la visualización, es necesario indicar las categorías agrupadas en forma de lista como vemos a continuación.
lista_categorias_agrupadas <- df_cat_grupos %>%
dplyr::select(grupo, x) %>%
dplyr::group_by(name = grupo) %>%
dplyr::summarise(categories = list(x)) %>%
highcharter::list_parse()
hchart(
df_cat_grupos,
type = "column",
hcaes(x, y, grupo, color = grupo)
) |>
hc_xAxis(categories = lista_categorias_agrupadas) |> # Indicar las categorías agrupadas como una lista
hc_title(text = "<b>Gráfico de columnas por grupos</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com") |>
hc_legend(list(enable = FALSE)) |>
hc_add_dependency("plugins/grouped-categories.js")
Y así tendríamos un gráfico de columnas agrupado en highcharter. En el próximo post veremos cómo representar los mismos datos pero apilando los diferentes grupos en una misma columna.