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)
Created with Highcharts 9.3.1xyGráfico de columnas en coordenadas polaresG1G2G3ABC30255075http://elartedeldato.com

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
Created with Highcharts 9.3.1xyGráfico de columnas en coordenadas polaresG1G2G3ABC30102030405060708090100http://elartedeldato.com

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
    )
  )
Created with Highcharts 9.3.1xyGráfico de columnas en coordenadas polares38%38%38%38%42%42%27%27%27%27%23%23%35%35%35%35%35%35%G1G2G3ABC30%10%20%30%40%50%60%70%80%90%100%http://elartedeldato.com