Propuesta para la SOTI 2023 Challenge de la Data Visualization Society

Herramientas: ggplot2, ggforce, inkscape

Esta es la propuesta que he presentado a challenge de la DVS para visualizar datos de la encuesta sobre el estado de la industria de la visualización de datos.

Challenges for data visualization practice

En febrero se publicó una nueva versión de ggplot2 (la 3.5.0) que incluye nuevas funcionalidades con las que me apetecía trastear. Así que comencé a trabajar sin ninguna idea concreta en mente, más allá de probar nuevas funcionalidades (que, como se verá, finalmente no he utilizado).

Empecé a salsear con coord_radial() pero los resultados no iban por donde yo quería. Ahora mismo coord_radial() y geom_curve() no se entienden, así que pasé a trastear con ggforce.

Warning: geom_curve() is not implemented for non-linear coordinates

coord_radial() y geom_curve() no se llevan bien.

Al trastear con coord_radial estuve trabajando con curvas, por lo que por seguir por esa vía inicialmente trabajé con geom_bezier(), pero al final he acabado usando geom_bspline2.

geom_bspline2() permite crear curvas de todo tipo a partir de una serie de puntos e intercalar aesthetics, por ejemplo para crear degradados de color a lo largo de una línea.

Inicialmente tenía la idea de comparar datos de encuestas de varios años, por lo que pensé en trabajar con ramas enfrentadas (cada rama representaría un tipo de respuesta, y cada racimo los datos de años distintos).

Palmera de bsplines.

Los extremos de las ramas mostrarían un punto con la información sobre el total de respuestas. Ahí era donde quería probar la posibilidad de incluir degradados como relleno en ggplot2, pero no funciona correctamente con geom_point (o yo no conseguí hacerlo funcionar como deseaba), así que hice algunas pruebas con geom_tile aplicando degradados radiales cuyo color exterior es el mismo que el color de fondo del gráfico. De esta forma, se crea un trampantojo visual gracias al cual parece haber puntos, y no rectángulos.

pruebas con geom_tile aplicando degradados radiales en fill (nueva funcionalidad en ggplot 3.5.0)

Sin embargo, esta aproximación tiene un problema importante, y es que si los puntos están demasiado cerca los rectángulos acaban por solaparse.

Después de un par de intentos más decidí cambiar el enfoque y trabajar solo con los datos de la última encuesta. Para entonces ya tenía más o menos claro que quería simular algún tipo de elemento vegetal.

Con esa metáfora visual en mente, diseñé una primera versión en la que hay cuatro ramas por encima de una línea, y dos por debajo. Las ramas superiores representan distintas opciones de respusta, mientras que las dos inferiores muestran aquellas encuestas que no han respondido a esta pregunta.

Ramificación inicial

Lo que no me convencía de esta propuesta es que la opción No impact aparecía vinculada a las tres opciones que implican algún tipo de impacto, y quería reagruparlas de tal forma que se apreciara mejor la proporción entre respuestas que sí consideran que un determinado challenge les afecta en su trabajo, y las que no.

La versión final tiene dos ramas principales, una que recoge las subramas con respuestas que implican algún tipo de impacto en el trabajo diario, y otra que recoge las que impllican que no tiene impacto (bien porque lo indican expresamente o bien porque no seleccionan ninguna opción para este challenge en concreto).

También añadí una especie de raíz que representa el número de personas que no han contestado a esta pregunta.

Ramificación definitiva

La versión final incluye un punto por cada respuesta recogida en cada challenge y opción de respuesta. Los puntos se organizan en una espiral que simula una flor. A más respuestas, mayor en la espiral.

Espirales

Para la composición final (realizada con Inkscape) he añadido detalles con la ayuda de varias extensiones de ggplot2 en una de las facetas para que funcione como leyenda general de toda la composicón: ggforce (geom_mark_hull), geomtextpath (geom_textpath), ggtext (geom_richtext)


Más posts