8 Visualización gráfica
En la siguiente sección nos ocupamos del aspecto más visual en el análisis de datos. Los gráficos son hoy en día uno de los elementos más potentes sobre los que descansa la analítica de datos (Kuan 2015) . En muchos casos es el único instrumento utilizado para comunicar los resultados de una investigación. Nuestra elección para ilustrar esta parte del documento es el uso del paquete highcharter
. Este paquete es un wrapper del software highcharts
y ha sido desarrollado para ser utilizado en R. Highcharts
es un librería de JavaScript muy conocida y una de las más utilizadas en el desarrollo de páginas web. En esta sección vamos a enseñarte como aprovechar toda la potencia visual de los gráficos, utilizando como vehículo de propulsión el paquete highcharter
desarrollado por (Kunst 2020).
8.1 Paquete highcharter, introducción
El paquete highcharter
es un contenedor o wrapper para la biblioteca Highcharts que incluye funciones de acceso directo para trazar objetos gráficos de R. Es una biblioteca de gráficos que ofrece numerosos tipos de gráficos con una sintaxis de configuración muy simple y repetitiva. Suponemos que ya estás acostumbrado a trabajar con R, por lo que no te resultará complicado seguir los pasos aquí indicados.
Este documento fundamentalmente se ha dedicado a trabajar con tablas cruzadas, ese elemento que tanta productividad produce y que tan claras deja las visualizaciones; sin embargo la mayoría de librerías de gráficos trabajan con dataframe , por lo que deberemos hacer una simplificación de la tabla para trabajar con ella de forma adecuada. No sería necesario, pero como digo te ayudará a ver con otros ojos la simplicidad de highcharter
. Comenzaremos trabajando con la base de la librería y en el desarrollo de la sección indicaremos como trabajar con tablas cruzadas.
Lo primero que debemos saber, es que hay unos nombres de campo (por defecto) que pueden existir en el dataframe , y cuya presencia facilita enormemente el trabajo con los gráficos. Mira esta tabla de datos. En esta tabla son muy importantes los nombres de los campos, porque su existencia hace que, sin apenas código, el gráfico ya visualiza de acuerdo a nuestra necesidad.
x | y | z | low | high | value | name | color | from | to | weight |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1.6 | -34.0 | -6.0 | 9.2 | 1 | lemon | #d35400 | lemon | olive | 1 |
1 | 11.0 | -23.0 | 6.7 | 15.3 | 10 | nut | #2980b9 | lemon | guava | 1 |
2 | 20.4 | 6.8 | 2.8 | 38.0 | 19 | olive | #2ecc71 | lemon | fig | 1 |
3 | 22.1 | 32.3 | 19.4 | 24.8 | 21 | guava | #f1c40f | nut | olive | 1 |
4 | 15.4 | 27.7 | 12.1 | 18.7 | 14 | fig | #2c3e50 | olive | pear | 2 |
5 | 7.4 | 3.2 | -11.8 | 26.6 | 6 | pear | #7f8c8d | guava | pear | 2 |
A saber …
x
, que contiene la secuencia de datosy
, que contiene el dato que habitualmente representaremos en el eje de las Y (ordenadas)z
, dimensiona el valor de y cuando se quieren usar tres dimensiones de representaciónlow
, valor más bajo para la categoríahigh
, valor más alto para la categoríavalue
, valor de la categoríaname
, que contiene lo nombres o textos de las categorías; suele ser lo que queremos que aparezca en el eje de las X (abscisas)color
, código del color en hexadecimal que modificará el color por defecto de la serie (puede ser también el nombre del color)from
, importante en gráficos especiales de tipo organización o donde hay una relación ‘desde’to
, igual al anterior, importante en gráficos especiales de tipo organización o donde hay una relación ‘hasta’weight
, utilizado en algunos gráficos a los que nos referiremos después.
Debemos saber que highcharter
nos permite utilizar dos tipos diferentes de funciones que a continuación explicamos, aunque nos centramos en la primera de ellas. La segunda es una forma de acortar la primera.
highchart()
hchart()
8.1.1 Función principal
highchart()
; esta función crea un gráfico highcharts
usando un widget. El widget creado se puede representar en páginas HTML generadas a partir de R Markdown y con características de interactividad. Si estás familiarizado con el paquete ggplot2
, es una función similar a ggplot()
del paquete donde se define un objeto ggplot
base sobre el cual se pueden agregar más capas geométricas. De manera similar, una vez que se define la función highchart()
, se pueden agregar más elementos highcharts
encima de ella, como si fueran capas superpuestas.
8.1.2 Otra forma más rápida
Por otro lado, hchart ()
es una función genérica para dibujar diferentes gráficos sobre la marcha. El gráfico resultante es un objeto highchart
, por lo que puede seguir modificando con la API implícita. Si estás familiarizado con ggplot2
, esta función es similar a qplot()
. Comencemos nuestro viaje de visualización interactiva con los diseño más sencillos.
8.2 Mi primer gráfico
Para trabajar con los gráficos, utilizaremos la anterior tabla de datos, muy sencilla, propuesta por el autor del paquete, que además contiene los nombres de campo estandarizados que nos van a ayudar a de forma muy sencilla a generar nuestras visualizaciones.
8.3 Gráfico de barras
Un diagrama de barras (o columnas) muestra la relación entre una variable numérica (y) y una categórica (name). Cada entidad de la variable categórica se representa como una barra. El tamaño de la barra representa su valor numérico. A veces se describe como una forma aburrida de visualizar información. Sin embargo, probablemente sea la forma más eficaz de mostrar este tipo de datos.
Vamos a mostrar las dos formas de hacer este gráfico y entenderás la información que te aportábamos en la descripción anterior de las funciones posibles para hacer un gráfico.
require(highcharter) # solicitamos la carga de highcharter si no lo está ya
<-
df1 select(df, name, y, color) # seleccionamos las columnas name e y, por un motivo que más adelante explicamos
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1) %>%
hc_plotOptions(series = list(animation = FALSE))
¿Por qué hemos seleccionado estos tres campos? Ya hemos hablado de la importancia del nombre de los campos en highcharter
. El gráfico de barras que es un estándar, es transformado a un gráfico de barras low-high si se localizan estos nombres de campo, low y high en el dataframe de trabajo, y el dataframe original df
los tenía. Por tanto si repetimos este gráfico, pero con el dataframe original con esos dos campos, veremos que variación se produce.
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(df) %>%
hc_plotOptions(series = list(animation = FALSE))
La barra no se traza completa sino que se traza con origen en el valor más bajo ( low
), y con final en el valor más alto ( high
). Sin embargo si acercas el ratón a una barra, verás que el valor listado se corresponde con el campo y
del dataframe .
Vamos a realizar unas pequeñas variaciones muy habituales en los gráficos.
8.3.1 Cambiar el nombre de la serie de datos
La primera modificación sería añadir el nombre de la serie al gráfico …
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits') %>%
hc_plotOptions(series = list(animation = FALSE))
Podemos observar, como en ángulo inferior derecho de la ventana del gráfico aparece la palabrafruitsque hemos escrito como nombre del conjunto de datos, que en realidad es una única serie.
8.3.2 Añadir créditos al gráfico
Añadir un pie de gráfico con créditos del creador del mismo.
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits') %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_plotOptions(series = list(animation = FALSE))
Ver ángulo inferior derecho, justo debajo del nombre de la serie. Posibilidad de hacer clic y llegar hasta la URL indicada.
8.3.3 Añadir el valor del dato al elemento (datalabels)
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_plotOptions(series = list(animation = FALSE))
8.3.4 Guardar y exportar el gráfico
En ocasiones es necesario dar la oportunidad al usuario del gráfico de poder guardarlo como imagen o guardarlo como tabla de EXCEL o fichero de texto separado por ‘,’ (CSV).
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.3.5 API de Highcharts, toda la potencia de los gráficos
La pregunta que ahora nos deberíamos estar haciendo es… ¿como puedo yo saber que debo usar hc_credits()
, o hc_exporting()
o dataLabels(list=())
?
Para eso tenemos lo que se llama la API de la librería de gráficos. Ahora entenderemos mejor el apartado de presentación cuando decíamos que highcharter
es unwrapperde la librería Highcharts
. Si visitamos el sitio web de la api de highcharts podemos ver que todas las opciones que se pueden usar en los gráficos están documentadas. Si a ello añadimos el sitio demo de esta marca podemos ver todo lo que se puede hacer. Te recomiendo la lectura del post de Danton Noriega acerca de como usar la API para saber construir nuestros gráficos de Highchart
en R, en especial la parte en la que refiere a este punto que estamos hablando (Highcharts API and highcharter functions)
. Tras la lectura de ese post te darás cuenta de que en tus manos de analista de datos, tienes un auténtico cañón de magníficas visualizaciones. Pero vayamos poco a poco y continuemos con nuestros ejemplos de gráficos.
8.4 Gráfico de columna
Es un gráfico idéntico al anterior, pero con la barra vertical en lugar de horizontal. Mantenemos la última vista básica con los elementos añadidos de exportación, créditos y mostrado de valores de aquí en adelante.
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Obsérvese que en el gráfico, lo único que hemos hecho ha sido modificar el tipo de gráfico de bar
a column
. Añadamos ahora perspectiva al gráfico, incluyendo la lista de opciones de 3D.
highchart() %>%
hc_chart(type = 'column',
options3d = list(
enabled = TRUE,
beta = 45,
alpha = 15
%>%
)) hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.4.1 Variación de columna a pirámide
Y si lo presentamos en forma de pirámide …
highchart() %>%
hc_chart(type = 'columnpyramid') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
df1,name = 'Fruits',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE)
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.4.2 Variación de columna a lollipop
Y si lo presentamos en forma de lollipop, debemos variar al dataframe al completo, porque este gráfico muy parecido a la variación de rango, requiere del low-high.
highchart() %>%
hc_chart(type = 'dumbbell') %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(
df,name = 'Fruits',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE)
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
O también …
highchart() %>%
hc_chart(type = 'dumbbell', inverted = TRUE) %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(
df,name = 'Fruits',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE)
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.4.3 Gráficos polares
Existe otra forma de visualizar el gráfico que nos va a gustar mucho, porque se ve en pocas ocasiones.
highchart() %>%
hc_chart(type = 'bar', polar = TRUE) %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese que se ha añadido el modificador polar=TRUE
Una buena vista, espectacular pero poco efectiva. Desde el propio script, sin embargo se puede añadir una mínima opción que mejoraría esta salida.
highchart() %>%
hc_chart(type = 'bar', polar = TRUE) %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_pane(endAngle = 270) %>%
hc_plotOptions(series = list(animation = FALSE))
Esta nueva función hc_pane()
hace que el círculo termine en el ángulo 270 (de 360), de forma que las etiquetas se leen mejor. Pero no es una visualización fácil, visualmente atractiva, pero difícil de leer e intepretar.
8.5 Diagramas de secciones
8.5.1 Tarta o pie chart
Si hay algún gráfico tan o más famoso que el de barras o el de columnas, ese es el gráfico de tarta.
$sliced <- c(0, 1, 0, 0, 1, 0)
df#añadimos el campo sliced
highchart() %>%
hc_title(text = 'Fruits pie') %>%
hc_subtitle(text = 'My favourite fruits') %>%
hc_chart(type = 'pie',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(df, name = 'Fruits', showInLegend = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
<- select(df,-sliced)
df #eliminamos el campo sliced
Además de haberle añadido un título y un subtítulo este gráfico presenta un nuevo elemento fundamental: el modificador showInLegend=TRUE
que nos permite mostrar una leyenda con las diferentes frutas y sus colores. Además, en el script hemos comenzado por añadir un nuevo campo a la tabla df, denominado sliced
que ya puedes ver su efecto, separa del centro (desgaja) una sección de la tarta. En este caso ha sucedido para la fruta en segundo lugar (nut) y para la que está en quinto lugar (fig).
8.5.2 Anillo o doughnut
Y si queremos convertir este gráfico en un anillo o doughnut utilizaremos el modificador innerSize='75%'
en la función hc_add_series()
. Este modificador traza un círculo desde el baricentro del diagrama hasta el porcentaje indicado dejando espacio central en blanco. El gráfico puede tomar diferente aspecto según ese porcentaje indicado.
highchart() %>%
hc_title(text = 'Fruits pie') %>%
hc_subtitle(text = 'My favourite fruits') %>%
hc_chart(type = 'pie',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(df,
name = 'Fruits',
showInLegend = TRUE,
innerSize = '75%') %>%
hc_plotOptions(series = list(animation = FALSE))
o también, cambiando el radio inferior de vaciado …
highchart() %>%
hc_title(text = 'Fruits pie') %>%
hc_subtitle(text = 'My favourite fruits') %>%
hc_chart(type = 'pie',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_add_series(df,
name = 'Fruits',
showInLegend = TRUE,
innerSize = '33%') %>%
hc_plotOptions(series = list(animation = FALSE))
8.5.3 Funnel
Una variante para gráficos de un único campo es el funnel.
highchart() %>%
hc_chart(type = 'funnel',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Frutas',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE),
colorByPoint = TRUE
%>%
) hc_plotOptions(series = list(animation = FALSE))
8.5.4 Pirámide
Una nueva variante para un gráfico de una sola variable. el tipo pyramid.
highchart() %>%
hc_chart(type = 'pyramid',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Frutas',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE),
colorByPoint = TRUE
%>%
) hc_plotOptions(series = list(animation = FALSE))
8.6 Gráfico de línea
Un nuevo pero tradicional modelo, el gráfico de línea. Vamos a aprovechar para no ser demasiado repetitivos para añadir una nueva serie de valores; recordemos la tabla de datos inicial.
::kable(df) knitr
x | y | z | low | high | value | name | color | from | to | weight |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1.6 | -34.0 | -6.0 | 9.2 | 1 | lemon | #d35400 | lemon | olive | 1 |
1 | 11.0 | -23.0 | 6.7 | 15.3 | 10 | nut | #2980b9 | lemon | guava | 1 |
2 | 20.4 | 6.8 | 2.8 | 38.0 | 19 | olive | #2ecc71 | lemon | fig | 1 |
3 | 22.1 | 32.3 | 19.4 | 24.8 | 21 | guava | #f1c40f | nut | olive | 1 |
4 | 15.4 | 27.7 | 12.1 | 18.7 | 14 | fig | #2c3e50 | olive | pear | 2 |
5 | 7.4 | 3.2 | -11.8 | 26.6 | 6 | pear | #7f8c8d | guava | pear | 2 |
Vamos a utilizar z, como si fuera una nueva serie de valores. Es decir como si quisiéramos representar en el diagrama dos conjuntos de valores. Primero lo mostramos como hasta ahora, con una sola serie…
<-
df1 select(df, name, y, z, color) # seleccionamos las columnas name, y y z
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits', dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Para ahora añadir la nueva serie. Nótese la variación en el modificador hc_add_series()
donde ahora hay dos líneas, como si de dos capas se tratara.
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1, name = 'Fruits - serie 1', dataLabels = list(enabled =
TRUE)) %>%
hc_add_series(df1$z, name = 'Fruits - serie 2', dataLabels = list(enabled =
TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Quisiera hacer notar que simplemente hemos añadido una nueva serie que se contiene en la columna denominada z de df1 (df1$z) y no hemos modificado la anterior serie que por defecto era el campo y
. Creo que sería mucho más limpio y ordenado el escribir este mismo gráfico así.
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1$y, name = 'Fruits - serie 1', dataLabels = list(enabled =
TRUE)) %>% # minimo cambio identificador
hc_add_series(df1$z, name = 'Fruits - serie 2', dataLabels = list(enabled =
TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
De este modo, identificamos que es cada una de las series y
y z
, obteniendo idéntico resultado pero quedando más clara la sintaxis de cada una de las series introducidas.
8.6.0.1 Suavizado de la línea
En muchas ocasiones es interesante suavizar la línea. Para ello highcharts
tiene un modificador del tipo de gráfico denominado spline
.
highchart() %>%
hc_chart(type = 'spline') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1$y, name = 'Fruits - serie 1', dataLabels = list(enabled =
TRUE)) %>%
hc_add_series(df1$z, name = 'Fruits - serie 2', dataLabels = list(enabled =
TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese el suavizado de la curva.
Y ha llegado un momento de hacer algo no habitual, pero que sí puede darte ideas de futuro.
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1$y, name = 'Fruits - serie 1', dataLabels = list(enabled =
TRUE)) %>%
hc_add_series(
$z,
df1type = 'column',
name = 'Fruits - serie 2',
dataLabels = list(enabled = TRUE)
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Sencillo, ¿verdad? Hemos combinado línea con columna (no todas las combinaciones son posibles). Además como z
tenía valores negativos, las barras negativas se muestran muy claramente. ¿Y si polarizamos este gráfico?
highchart() %>%
hc_chart(type = 'line', polar = TRUE) %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1$y, name = 'Fruits - serie 1', dataLabels = list(enabled =
TRUE)) %>%
hc_add_series(
$z,
df1type = 'column',
name = 'Fruits - serie 2',
dataLabels = list(enabled = TRUE)
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
¡Nada mal! aunque es posible que no combinando el tipo de representación en las series, la visualización sea más clara, en lo que se denomina gráfico spider que es muy utilizado para las baterías o tablas de ítems en nuestras encuestas. Y ya puestos, añadimos un toque de color a nuestro gráfico. Analiza tú mismo los modificadores que cambian.
highchart() %>%
hc_chart(type = 'line',
polar = TRUE,
backgroundColor = '#E2E2E2') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Fruits - serie 1',
dataLabels = list(enabled = TRUE),
color = '#eb6909'
%>%
) hc_add_series(
$z,
df1name = 'Fruits - serie 2',
dataLabels = list(enabled = TRUE),
color = 'teal'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.7 Gráficos de columnas o barras con apilamiento
Volvamos la vista un poco atrás, y ahora que tenemos dos series, vamos a jugar un poco más el gráfico o más específicamente con las columnas (o barras). Vamos a realizar los apilamientos (no se pueden hacer lógicamente con los gráficos de tarta).
Recuperamos nuestro gráfico de columnas, pero lo hacemos ahora con las dos series, pero ahora, para que los dos valores (y,z) sean positivos, vamos a trabajar con el campo denominado y
y el campo denominado value
.
<-
df1 select(df, name, y, z, value, color) # seleccionamos las columnas name, y y value
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese que hemos añadido una novedad y es la asignación a la serie del color que nos gusta para ella, mediante el modificador color
en la opción hc_add_series()
. Procedamos con el apilamiento.
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'normal'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'normal'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese que en ambas series, se ha introducido el modificador stacking='normal'
que ocasiona ese ajuste en las series. Podemos combinar series con apilamiento y series sin apilamiento (agrupaciones de categorías para verlas conjuntamente).
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'normal'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'normal'
%>%
) hc_add_series(
$z,
df1name = 'Año 2020',
dataLabels = list(enabled = TRUE),
color = '#020202'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Y por último, el apilamiento puede ser normal
o puede ser percent
donde la representación (que no el valor mostrado) se calcula en base 100. Nótese que todas las columnas son igual de altas y nótese que nuevamente z
se mantiene sin apilamiento.
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'percent'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'percent'
%>%
) hc_add_series(
$z,
df1name = 'Año 2020',
dataLabels = list(enabled = TRUE),
color = '#020202'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Por último, apilemos todas, cambiando a barras …
highchart() %>%
hc_chart(type = 'bar') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'percent'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'percent'
%>%
) hc_add_series(
$z,
df1name = 'Año 2020',
dataLabels = list(enabled = TRUE),
color = '#020202',
stacking = 'percent'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Y pongamos el gráfico en estilo polar
.
highchart() %>%
hc_chart(type = 'column', polar = 'TRUE') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'percent'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'percent'
%>%
) hc_add_series(
$z,
df1name = 'Año 2020',
dataLabels = list(enabled = TRUE),
color = '#020202',
stacking = 'percent'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.8 Gráfico de área
Volvamos a nuestras dos series ( y
, value
) para presentar ahora una nueva visualización, el gráfico de área
. Esta es una variación del gráfico de línea donde se dibujan éstas pero con la superficie bajo las líneas con el color indicado, mostrándose de esta forma.
highchart() %>%
hc_chart(type = 'area') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese la superposición de una y otra. Normalmente ese gráfico se usa para representar mediciones en las que una siempre está por encima de la otra (como aquí sucede), pero siempre pensando que las áreas de intersección van a combinar el color.
Podemos también apilar los valores directos.
highchart() %>%
hc_chart(type = 'area') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'normal'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'normal'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
O mostrar las áreas con base 100.
highchart() %>%
hc_chart(type = 'area') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(
$y,
df1name = 'Año 1900',
dataLabels = list(enabled = TRUE),
color = '#EB6909',
stacking = 'percent'
%>%
) hc_add_series(
$value,
df1name = 'Año 2000',
dataLabels = list(enabled = TRUE),
color = '#C2C2C2',
stacking = 'percent'
%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.9 Gráfico de puntos o scatterplot
Variación de los anteriores vamos a presentar sus dos versiones. La versión llamemos natural sería representar los puntos (igual que en el gráfico de línea) pero sin dibujar el trazo que los une.
highchart() %>%
hc_chart(type = 'scatter') %>%
hc_xAxis(categories = df1$name) %>%
hc_add_series(df1$y, name = 'Año 1900', dataLabels = list(enabled = TRUE)) %>%
hc_add_series(df1$value,
name = 'Año 2000',
dataLabels = list(enabled = TRUE)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Sin embargo, cuando se piensa en un scatterplot, lo que se piensa es en un diagrama de dispersión o mapa cartesiano donde se presentan los puntos con sus coordenadas en x
y también en y
. Un diagrama de dispersión muestra la relación entre 2 variables numéricas. Para cada punto de datos, el valor de su primera variable se representa en el eje X, el segundo en el eje Y. Como no disponemos datos para un buen scatterplot, vamos a construirnos un banco de datos (aleatorio) y trabajamos con él.
#==================== construcción del _dataframe_
set.seed(311265) # para que la aleatoriedad sea siempre la misma, fijamos su semilla de aleatorización
<-
dfextra data.frame(
mat = sample(1:100, 400, replace = TRUE),
# un valor de un campo X, por ejemplo puntuación en habilidad en matemáticas
bio = sample(1:100, 400, replace = TRUE),
# un valor de un campo y, por ejemplo puntuación en habilidad en biología
glob = sample(50:100, 400, replace = TRUE),
# un valor z de peso global de adecuación al puesto
grp = sample(1:3, 400, replace = TRUE) # grupo de pertenencia (tres grupos, 1, 2 y 3)
)#================== mostramos extracto del data frame
::kable(head(dfextra)) %>% # mostramos breve extracto de la tabla creada
knitrkable_styling(
bootstrap_options = c('striped', 'hover', 'condensed', 'responsive'),
full_width = F
)
mat | bio | glob | grp |
---|---|---|---|
72 | 80 | 76 | 3 |
6 | 49 | 85 | 3 |
76 | 47 | 55 | 2 |
50 | 42 | 98 | 2 |
65 | 77 | 69 | 2 |
34 | 8 | 97 | 3 |
Y vamos con el gráfico …
hchart(dfextra, 'scatter', hcaes(x = mat, y = bio, group = grp)) %>%
hc_plotOptions(series = list(animation = FALSE))
Puedes observar que para este tipo de gráfico hemos optado por la forma acotada; esto es debido a que la forma de ofrecerle los datos es más simple, sin embargo podemos seguir añadiendo elementos al mismo del mismo modo que lo hacíamos con el uso de la función highchart()
. La agrupación por colores es debida al modificador de grupo group=grp
en la función hcaes()
. Si no lo ponemos, simplemente el color sería único.
hchart(dfextra, 'scatter', hcaes(x = mat, y = bio)) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Una última variación al scatterplot sería convertirlo en un bubble scatterplot. Un diagrama de burbujas es un diagrama de dispersión donde se agrega una tercera dimensión: el valor de una variable numérica adicional se representa mediante el tamaño de los puntos. Necesita 3 variables numéricas como entrada: una está representada por el eje X, una por el eje Y y otra por el tamaño del punto. Más vale un imagen que mil palabras.
hchart(dfextra, 'scatter', hcaes(
x = mat,
y = bio,
z = glob,
group = grp
%>%
)) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.10 Histograma o gráfico de densidad
También en este caso vamos a recurrir a la forma simple. Un histograma solo toma como entrada una variable numérica. La variable se divide en varios cortes y el número de observaciones por corte se representa mediante la altura de la barra. Es posible representar la distribución de varias variables en el mismo eje utilizando esta técnica. Sigamos utilizando nuestro nuevo dataframe dfextra
.
hchart(dfextra$mat, color = 'teal', name = 'Matemáticas') %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Este gráfico puede fácilmente reconvertirse a la función de densidad. Una gráfica de densidad muestra la distribución de una variable numérica. Solo toma variables numéricas como entrada y está muy cerca de un histograma. Puede usarse exactamente en las mismas condiciones.
hchart(density(dfextra$mat), color = 'teal', name = 'Matemáticas') %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.11 Gráficos indicadores
Estos gráfico están caracterizados en su mayor parte por presentar un único valor numérico en una imagen muy simplificada. Su mayor exponente es el denominado gauge
que estamos acostumbrados a ver en multitud de páginas web de tipo dashboard. Se caracterizan por tener datos que se proporcionan de forma externa al dataframe de donde se representa la información. Veamos algunos ejemplos.
8.11.1 Gauge
Un gráfico de indicador (o gráfico de velocímetro) combina un gráfico de anillo y un gráfico circular en un solo gráfico. Muestra el valor deseado al que se le presupone un valor mínimo y un máximo. Es muy típico para representar por ejemplo el NPS y presentarlo con secciones tipo semáforo. En nuestro script y con afán de ir probando nuevas cosas, crearemos primero lo que se denominan las secciones del semáforo (3 o n) y luego haremos el gráfico. Representemos el campo value
de nuestras frutas, comenzando por la oliva (fila 3) . Presentamos el script de forma más extendida para ir apreciando y comentando alguno de sus detalles
<-
col_stops data.frame(
q = c(0.25, 0.50, 0.75),
# se establecen las secciones de valor en término porcentual
c = c('#CD5C5C', '#F0E68C', '#3CB371'),
# se establecen los colores que tomará cada sección
stringsAsFactors = FALSE
)<-
stops list_parse2(col_stops) # se crea una lista con este _dataframe_ que hemos creado, pues highcharts lo necesita así.
highchart() %>%
hc_chart(type = 'solidgauge') %>%
hc_pane(
startAngle = -90,
# determina el ángulo donde comienza
endAngle = 90,
# determina el ángulo donde acaba
background = list(
outerRadius = '100%',
# 'vaciamos' el hueco del círculo que hemos dibujado
innerRadius = '60%',
# 'vaciamos' el hueco del círculo que hemos dibujado
shape = 'arc'
)%>%
) hc_tooltip(enabled = FALSE) %>%
hc_yAxis(
stops = stops,
# le aplicamos la lista de secciones colo (semáforo)
lineWidth = 0,
minorTickWidth = 0,
tickAmount = 2,
min = 0,
max = 100,
labels = list(y = 25) # baja las etiquetas 0 y 100 de límites para que no sitúen sobre el gráfico
%>%
) hc_add_series(
data = df$high[3],
# le indicamos que capturamos el valor desde _dataframe_ 'df', del campo 'high', y la fila '3'
dataLabels = list(
borderWidth = 0,
useHTML = TRUE,
style = list(fontSize = '60px')
)%>%
) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Prueba si lo deseas a ir cambiando el valor de df$high[3]
a cualquier valor entre 0 y 10 y observarás el cambio de color.
<-
col_stops data.frame(
q = c(0.25, 0.50, 0.75),
c = c('#CD5C5C', '#F0E68C', '#3CB371'),
stringsAsFactors = FALSE
)<- list_parse2(col_stops)
stops highchart() %>%
hc_chart(type = 'solidgauge') %>%
hc_pane(
startAngle = -90,
endAngle = 90,
background = list(
outerRadius = '100%',
innerRadius = '60%',
shape = 'arc'
)%>%
) hc_tooltip(enabled = FALSE) %>%
hc_yAxis(
stops = stops,
lineWidth = 0,
minorTickWidth = 0,
tickAmount = 2,
min = 0,
max = 100,
labels = list(y = 25)
%>%
) hc_add_series(data = 65,
dataLabels = list(
borderWidth = 0,
useHTML = TRUE,
style = list(fontSize = '60px')
%>%
)) hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.11.2 Bullet
Otra forma de representar valores unitario pero que tienen un objetivo definido y que pueden haber superado ese objetivo es el gráfico denominado bullet. vamos a imaginar que en nuestro dataframe , el campo y
es el valor alcanzado, y el campo value
es el objetivo.
<-
bandas list(
list(from = 0, to = 10, color = '#ddd'),
list(from = 10, to = 20, color = '#bbb'),
list(from = 20, to = 25, color = '#888')
)hchart(
df1,'bullet',
hcaes(x = name, y = y, target = value),
color = 'teal',
targetOptions = list(color = 'black')
%>%
) hc_chart(inverted = TRUE) %>%
hc_yAxis(
min = 0,
max = 25,
gridLineWidth = 0,
plotBands = bandas
%>%
) hc_xAxis(gridLineWidth = 15, gridLineColor = 'white') %>%
hc_plotOptions(series = list(
pointPadding = 0.25,
pointWidth = 15,
borderWidth = 0,
targetOptions = list(width = '200%')
%>%
)) hc_size(height = 300) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Nótese que en el gráfico la barra vertical perpendicular a cada barra horizontal, que es el target
se toma de los propios datos. Es un gráfico que también se ve mucho en losdashboard_, al igual que el anterior.
8.12 Gráfico de caja o boxplot
No lo hemos olvidado, el gráfico más típico en estadística junto con los histogramas, el denominado boxplot o diagrama de caja o diagrama de Box-Whiskers. Un diagrama de caja ofrece un buen resumen de una o varias variables numéricas. La línea que divide el cuadro en 2 partes representa la mediana de los datos. El final del cuadro muestra los cuartiles superior e inferior. Las líneas extremas muestran el valor más alto y más bajo excluyendo los valores atípicos. Nótese que es usada una función de tranformación de los datos del campo value
para obtener los valores adecuados para el gráfico. Del mismo modo, nótese que la función de adición de las series, se ve mínimamente modificada ya que va a recibir una lista de valores por cada campos de trabajo. Usamos hc_add_series_list()
.
<-
dfboxplot1 data_to_boxplot(df,
value,add_outliers = TRUE,
name = 'value',
color = 'teal')
highchart() %>%
hc_chart(type = 'boxplot') %>%
hc_add_series_list(dfboxplot1) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Añadir más series sólo implica repetir el proceso, lo que permite la compración.
<-
dfboxplot1 data_to_boxplot(df,
value,add_outliers = TRUE,
name = 'value',
color = 'teal')
<-
dfboxplot2 data_to_boxplot(df,
high,add_outliers = TRUE,
name = 'high',
color = 'red')
<-
dfboxplot3 data_to_boxplot(df,
low,add_outliers = TRUE,
name = 'low',
color = 'orange')
highchart() %>%
hc_chart(type = 'boxplot') %>%
hc_add_series_list(dfboxplot1) %>%
hc_add_series_list(dfboxplot2) %>%
hc_add_series_list(dfboxplot3) %>%
hc_credits(enabled = TRUE,
text = 'InvestigaOnline.com',
href = 'https://www.investigaonline.com') %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.13 Gráfico de barras de error
A menudo tenemos necesidad de incluir un gráfico denominado de barras de error. Este gráfico toma los valores de low-high (que podrían ser lo límites de confianza de un intervalo) y los representa en forma gráfica, quedando de esta forma.
highchart() %>%
hc_chart(type = 'errorbar',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Límites de confianza',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE)
%>%
) hc_plotOptions(series = list(animation = FALSE))
Si además de los límites de la medición, quisiéramos añadir el punto de valor, el resultado sería éste.
highchart() %>%
hc_chart(type = 'errorbar',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Límites de confianza',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE)
%>%
) hc_add_series(
df,type = 'scatter',
name = 'Valor',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE, x = 15, y = 5)
%>%
) hc_plotOptions(series = list(animation = FALSE))
Probando nuevas cosas, hemos movido la etiqueta del valor hacia la derecha (x=15)
y hacia abajo (y=5)
. Eso hace que no se solape con el punto señalado en el gráfico.
8.14 Gráficos de transiciones
En nuestro trabajo en mucho casos debemos a veces plantear gráficos en los que se trata de graficar relaciones de objetos con fuente y destino. Aunque nuestro banco de datos es muy simple, hemos creado campos con el nombre de weight
, from
y to
para que nos permitan hacer este tipo de gráficos que tienen dos versiones diferentes: el diagrama de Sankey y el diagrama de rueda de dependencia. Veamos ambos.
8.14.1 Diagrama de Sankey
El diagrama de Sankey es un tipo específico de diagrama de flujo, en el que la anchura de las linea de relación entre dos puntos denominados from y to que se muestra proporcional a la cantidad de flujo transferido (weight, que podría ser frecuencia de emparejamiento).
highchart() %>%
hc_chart(type = 'sankey',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Nombre de la serie',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE),
colorByPoint = TRUE
%>%
) hc_plotOptions(series = list(animation = FALSE))
De esta forma se muestra que las relaciones más fuertes se producen entre aceituna y pera o entre guava y pera.
8.14.2 Diagrama de rueda
Otra forma de ver el mismo gráfico, pero en forma circular. Las mismas necesidades de campos weight
, from
y to
.
highchart() %>%
hc_chart(type = 'dependencywheel',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
df,name = 'Nombre de la serie',
showInLegend = FALSE,
dataLabels = list(enabled = TRUE),
colorByPoint = TRUE
%>%
) hc_plotOptions(series = list(animation = FALSE))
8.14.3 Diagrama streamgraph
Un streamgraph es un tipo de gráfico de áreas apiladas. Muestra la evolución de un valor numérico (eje Y) después de otro valor numérico (eje X). Esta evolución está representada por varios grupos, todos con un color distinto. Al contrario que en un área apilada, no hay esquinas: los bordes están redondeados, lo que da esta agradable impresión de flujo. Además, las áreas generalmente se desplazan alrededor de un eje central, lo que da como resultado una forma fluida y orgánica.
Usaremos los valores y
, z
y value
para crear tres series.
highchart() %>%
hc_chart(type = 'streamgraph',
polar = FALSE,
inverted = FALSE) %>%
hc_xAxis(categories = df$name) %>%
hc_yAxis(visible = TRUE) %>%
hc_tooltip(outside = TRUE, enabled = TRUE) %>%
hc_add_series(
$y,
dfname = 'y',
showInLegend = FALSE,
dataLabels = list(enabled = FALSE),
color = 'silver'
%>%
) hc_add_series(
$z,
dfname = 'z',
showInLegend = FALSE,
dataLabels = list(enabled = FALSE),
color = 'teal'
%>%
) hc_add_series(
$value ,
dfname = 'value',
showInLegend = FALSE,
dataLabels = list(enabled = FALSE),
color = 'orange'
%>%
) hc_plotOptions(series = list(animation = FALSE))
8.14.4 Diagrama de redes
Para finalizar como homenaje a mis compañeros en TESI, quiero poner este gráfico muy de moda en la actualidad para representar transiciones, flujos o relaciones más complejas. Como es obvio, recogemos los datos de forma externa (ocultamos el código de carga) y presentamos los mismos en la imagen. El gráfico muestra nuestras relaciones de proyecto y unidades de negocio de modo interno.
#edges contiene las relaciones mientras que names contiene los elementos
<- graph_from_data_frame(edges, directed = TRUE, vertices = names)
g
hchart(g,
layout = layout_with_fr,
dataLabels = list(enabled = TRUE, format = '{point.name}')) %>%
hc_title(text = 'TESI', useHTML = TRUE) %>%
hc_tooltip(useHTML = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
8.15 Conclusión
Hemos presentado de forma muy breve y simplificada cómo podemos aprovechar toda la potencia de highcharts
en nuestros scripts. Lo importante es practicar y practicar. Hay muchísmas más posibilidades e ideas para tus visualizaciones en Highcharts.com. No dejes tampoco de leer el post de Danton Noriega acerca de como usar la API para saber construir los gráficos highchart
en R mediante highcharteR
Del mismo modo, no dejes de acudir al sitio web de Joshua Kunst, creador y mantenedor del paquete junto con otros colaboradores que permiten llevar adelante este excelente proyecto.