Gráfico en coordenadas polares

En esta sección veremos cómo realizar un gráfico de columnas circular en coordenadas polares como siempre utilizando highcharter, una librería de R que nos permite hacer gráficos interactivos de forma sencilla.

El tema de los gráficos lo puedes encontrar en el capítulo 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 en coordenadas polares en highcharter

Los datos que utilizaremos son los mismos de los posts anteriores sobre gráficos de columnas.

Se trata de 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   

Para realizar el gráfico partimos del gráfico de columnas apiladas que aprendimos a hacer en la última entrada del blog. Básicamente consiste en un gráfico tipo column al cual le habilitamos la opción stacking.

Las coordenadas polares se pueden añadir con la función hc_chart(polar = TRUE).

Advertencia

No confundir con la función principal hchart()!

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 en coordenadas polares</b>") |>
  hc_credits(enabled = TRUE, text = "http://elartedeldato.com") |>
  hc_chart(polar = T)

Cómo intercambiar los ejes en un gráfico de coordenadas polares en highcharter

Tal vez, el gráfico anterior no sea el que buscamos, ya que, por defecto, highcharter dispone las categorías en los ángulos y la variable numérica en la distancia al origen.

Para invertirlos, es muy fácil, y tan solo necesitamos añadir el argumento inverted = TRUE.

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 en coordenadas polares</b>") |>
  hc_credits(enabled = TRUE, text = "http://elartedeldato.com") |>
  hc_chart(polar = TRUE, # coordendas polares
           inverted = TRUE) # invertir los ejes

Añadir etiquetas en un gráfico en coordendas polares

Las etiquetas sobre las columnas circulares se pueden añadir igual que en un gráfico de columnas básico, a través de la función dataLabels().

Además, incorporamos a las etiquetas eje y el símbolo porcentual para indicar las unidades del mismo.

hchart(
    df_cat_grupos,
    type = "column",
    hcaes(x = x, y = y, group = grupo),
    stacking = "percent", # Apilar columnas porcentuales
    dataLabels = list( 
      enabled = TRUE, # Añadir etiquetas
      format = "{point.percentage:.0f}%" # Definir formato de los porcentajes 
    )
  ) |>
  hc_title(text = "<b>Gráfico de columnas en coordenadas polares</b>") |>
  hc_credits(enabled = TRUE, text = "http://elartedeldato.com") |>
  hc_chart(polar = TRUE,
           inverted = TRUE)  |>
  hc_yAxis(
    labels = list(
      format = '{value}%' # Formato porcentual del eje y
    )
  )