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

Bienvenidos al sexto post del calendario de adviento 2022.
En el día de hoy veremos cómo crear un gráfico de columnas apiladas en highcharter. Esta visualización es útil cuando trabajamos con datos categóricos que constan de varios niveles de agregación. En el post anterior, vimos otra solución para este tipo de casos, véase hacer un gráfico de columnas por grupos.
Como siempre, 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)
Cómo hacer un gráfico de columnas apiladas en highcharter
Los datos que utlizaremos son los mismos del post anterior: un dataset con dos variable categóricas y una numérica.
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
A continuación, habilitamos la opción stacking
que significa apilado en inglés.
library(highcharter)
hchart(
df_cat_grupos,
type = "column",
hcaes(x = x, y = y, group = grupo),
stacking = list(enabled = TRUE) # Apilar columnas
) |>
hc_title(text = "<b>Gráfico de columnas apiladas</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com")
Otra alternativa es partir del gráfico de columnas por grupos y añadir el argumento en la función hc_plotOptions()
.
hc_plotOptions(
series = list(
stacking = list(enabled = TRUE) # Apilar columnas
)
)
Cómo hacer un gráfico de columnas apiladas porcentuales en highcharter
Al trabajar con datos categóricos, nos podría interesar realizar un gráfico de columnas apiladas porcentuales.
Para ello basta con indicar stacking = "percent"
dentro de la función hchart()
.
hchart(
df_cat_grupos,
type = "column",
hcaes(x = x, y = y, group = grupo),
stacking = "percent" # Apilar columnas porcentuales
) |>
hc_title(text = "<b>Gráfico de columnas apiladas porcentuales</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com")
hchart(
df_cat_grupos,
type = "column",
hcaes(x = x, y = y, group = grupo),
stacking = "percent" # Apilar columnas porcentuales
) |>
hc_title(text = "<b>Gráfico de columnas apiladas porcentuales</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com") -> hc
frameWidget(hc, height = "510px")
Añadir etiquetas en las columnas apiladas porcentuales en highcharter
Para añadir etiquetas sobre las columnas en highcharter utilizamos la función dataLabels()
. En concreto, para las columnas apiladas porcentuales, definiremos el formato de las etiquetas como tipo porcentual.
hchart(
df_cat_grupos,
type = "column",
hcaes(x = x, y = y, group = grupo),
stacking = "percent",
dataLabels = list(
enabled = TRUE, # Añadir etiquetas
format = "{point.percentage:.0f}%" # Definir formato de los porcentajes
)
) |>
hc_title(text = "<b>Gráfico de columnas apiladas porcentuales</b>") |>
hc_credits(enabled = TRUE, text = "http://elartedeldato.com") -> hc
hc
Añadir los porcentajes en el tooltip de un gráfico de columnas apiladas porcentuales en highcharter
Pero, ¿cómo podríamos añadir los porcentajes también en el tooltip?
Con la función hc_tooltip()
podemos modificar el formato del tooltip y complementar los valores absolutos point.y
con los valores porcentuales point.percentage
.
hc |>
hc_tooltip(
pointFormat = "<b>{series.name} {point.y:.0f}</b> ({point.percentage:.0f}%)" # Mostrar porcentaje en el tooltip
)