class: center, middle, inverse, title-slide # Visualización de datos ## Explotación y visualización ### Alberto Torres Barrán ### 2020-02-29 --- ## Introducción * Visualizar datos es mitad ciencia mitad arte * Una buena visualización: 1. representa los datos de forma correcta 2. es estéticamente agradable, sin elementos que distraigan del mensaje principal que queremos transmitir * Se han visto al menos dos herramientas para realizar gráficos: matplotlib y ggplot2 * En esta sesión: 1. como pasar de los datos al tipo de gráfico más adecuado 2. directorio con los tipos de gráficos más comunes (no todos!) 3. conceptos independientes de la herramienta concreta --- ## Gramática de gráficos * Descripción precisa de todos los componentes necesarios para realizar una visualización * Wilkinson, L. (2005), *The Grammar of Graphics* * Una de las implementaciones más conocidas es la librería `ggplot2`: * Wickham, H. (2009), [*ggplot2: Elegant Graphics for Data Analysis*](https://ggplot2-book.org/) * Artículo con las implicaciones de trasladar los conceptos de la gramática de gráficos a un lenguaje de programación (R): * Wickham, H. (2010), [*A Layered Grammar of Graphics*](https://vita.had.co.nz/papers/layered-grammar.pdf) --- ## Fundamentos de visualización de datos * Wilke, C. O., (2019) [Fundamentals of data visualization](https://serialmentor.com/dataviz/) * Guía moderna para realizar visualizaciones que: 1. reflejan los datos de forma precisa 2. cuentan una historia 3. tienen una estética profesional * Conceptos independientes de la herramienta que se usa! * Los ejemplos del libro están hechos con `ggplot2` y otras librerías auxiliares * Referencia principal de esta sesión (material en [Github](http://albertotb.com/curso-uam-dataviz/)) --- class: inverse, center, middle # Visualización de datos --- ## Características estéticas * Toda visualización es una correspondencia entre datos y características estéticas * Ejemplo: un gráfico de dispersión representa la relación entre dos variables, **x** e **y**, mediante puntos * Dos tipos: 1. pueden representar datos continuos 2. **no** pueden representar datos continuos --- ## Ejemplos ¿Cuáles de los siguientes elementos **no** pueden representar datos continuos? ![:vspace 4] .center[ ![](img/common-aesthetics-1.png) ] --- ## Tipos de datos * Independientes del lenguaje de programación/herramienta! 1. **Numéricos continuos**: números decimales 2. **Numéricos discretos**: por ej. números enteros 3. **Categóricos**: con o sin orden, por ej. las CC.AA de España 4. **Fechas/horas**: pueden ser continuos o discretos dependiendo de lo que representen 5. **Texto** --- ## Ejemplo ¿Qué tipos de datos hay en la siguiente tabla? <table> <thead> <tr> <th style="text-align:left;"> Fecha y hora </th> <th style="text-align:right;"> Temperatura (ºC) </th> <th style="text-align:right;"> Viento (km/h) </th> <th style="text-align:left;"> Dirección del viento </th> <th style="text-align:left;"> Estacion </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> 27/02/2020 00:00 </td> <td style="text-align:right;"> 7.1 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> Noroeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 01:00 </td> <td style="text-align:right;"> 6.3 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 02:00 </td> <td style="text-align:right;"> 6.3 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 03:00 </td> <td style="text-align:right;"> 6.6 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 04:00 </td> <td style="text-align:right;"> 5.9 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 05:00 </td> <td style="text-align:right;"> 4.3 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> Calma </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 06:00 </td> <td style="text-align:right;"> 4.2 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> Sudoeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 07:00 </td> <td style="text-align:right;"> 4.6 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> Calma </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 08:00 </td> <td style="text-align:right;"> 6.4 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 09:00 </td> <td style="text-align:right;"> 7.3 </td> <td style="text-align:right;"> 13 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> <tr> <td style="text-align:left;"> 27/02/2020 10:00 </td> <td style="text-align:right;"> 9.4 </td> <td style="text-align:right;"> 11 </td> <td style="text-align:left;"> Oeste </td> <td style="text-align:left;"> El Goloso </td> </tr> </tbody> </table> .center[ Fuente: [AEMET](http://www.aemet.es/es/eltiempo/observacion/ultimosdatos) ] --- ## Escalas * Definen la equivalencia entre valores y elementos del gráfico * Correspondencia 1 a 1 para evitar gráficos ambiguos ![:vspace 3] .center[ ![](img/basic-scales-example-1.png) ] --- ## Ejemplo gráfico de líneas .center[ ![](img/temp-normals-vs-time-1.png) ] --- ## Ejemplo *heatmap* ![:vspace 8] .center[ ![](img/four-locations-temps-by-month-1.png) ] --- ## Múltiples escalas ¿Cuántas escalas tiene el siguiente gráfico? .center[ ![:scale 75%](img/mtcars-five-scale-1.png) ] --- class: inverse, center, middle # Sistemas de coordenadas y ejes --- ## Sistemas de coordenadas * Necesarios para cualquier tipo de visualización * Determinan donde se van a posicionar los distintos valores * Para gráficos estándar en 2D, necesitamos 2 valores para identificar una posición * Además también necesitamos especificar la distribución relativa * **Sistema de coordenadas**: combinación de escalas de posición y su distribución relativa --- ## Coordenadas cartesianas * Sistema de coordenadas más habitual * Dos ejes ortogonales con escalas continuas, **x** e **y** * Invariantes frente a transformaciones lineales .center[ ![:scale 60%](img/cartesian-coord-1.png) ] --- ## Ejemplo .center[ ![:scale 90%](img/temperature-normals-Houston-1.png) ] --- ## Ejes lineales vs no lineales * **Eje lineal**: la separación entre dos líneas de la rejilla es la misma en la visualización que en las unidades de los datos * **Eje no lineal**: la distancia entre dos líneas de la rejilla no es proporcional a la separación en las unidades de los datos ![:vspace 0.5] .center[ ![:scale 80%](img/linear-log-scales-1.png) ] --- ## Escala logaritmica * Escala no lineal más común * Multiplicar en la escala logarítmica es como sumar en la escala lineal * Conveniente para datos que provienen de multiplicaciones/divisiones, por ej. ratios <table> <thead> <tr> <th style="text-align:right;"> poblacion </th> <th style="text-align:right;"> media </th> <th style="text-align:right;"> ratio </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 50 </td> <td style="text-align:right;"> 100 </td> <td style="text-align:right;"> 0.5 </td> </tr> <tr> <td style="text-align:right;"> 100 </td> <td style="text-align:right;"> 100 </td> <td style="text-align:right;"> 1.0 </td> </tr> <tr> <td style="text-align:right;"> 200 </td> <td style="text-align:right;"> 100 </td> <td style="text-align:right;"> 2.0 </td> </tr> </tbody> </table> ![:vspace 3] <img src="00-dataviz_files/figure-html/unnamed-chunk-4-1.png" style="display: block; margin: auto;" /> --- ## Ejemplo ![](img/oceania-gdp-relative-1.png) --- ## Otras escalas * Escala logarítmica es también útil cuando hay datos con magnitudes muy diferentes * Representar en una misma escala una ciudad con población 100 y otra con población 1M * Problema: no puede haber 0 en la escala logarítimica (`log(0) = -inf`) * En algunos casos pueden ser útiles otras transformaciones, por ej. la raíz cuadrada --- ## Ejemplo ![:vspace 7] .center[ ![](img/northeast-state-areas-1.png) ] --- ## Sistemas de coordenadas curvos * Las coordenadas polares son el ejemplo más común * Especificamos una posición usando un ángulo y una distancia radial al origen * Útiles para datos con periodicidad intrínseca ![:vspace 2] .center[ ![:scale 80%](img/polar-coord-1.png) ] --- ## Ejemplo .center[ ![](img/temperature-normals-polar-1.png) ] --- ## Datos geográficos ![](img/worldmap-four-projections-1.png) --- ## Otro ejemplo .center[ ![:scale 90%](img/mtcars_polar.png) Fuente: [ggradar](https://www.ggplot2-exts.org/ggradar.html) ] --- ## Otro (mal) ejemplo .center[ ![:scale 80%](img/dia_polar.png) Fuente: [Radar Plots usando ggplot2](https://rpubs.com/htejero/212368) ] --- class: inverse, middle, center # Escalas de color --- ## Escalas de color cualitativas * En variables categóricas, usamos el color para distinguir grupos que no tienen ningún orden * Características deseables: 1. claramente **distinguibles** unos de otros 2. **equivalentes** * ningún color puede destacar sobre el resto 3. distinguibles incluso para personas **daltónicas** --- ## Ejemplos * Se pueden crear escalas personalizadas en la web [ColorBrewer 2.0](http://colorbrewer2.org/) * También hay muchas disponibles: ![:scale 75%](img/qualitative-scales-1.png) * A no ser que exista alguna razón de peso (por ej. colores corporativos), siempre es recomendable usar una de las múltiples escalas por defecto * Muchas fueron creadas para cumplir las propiedades anteriores: * .footnotesize[Okabe, M., and K. Ito. (2008), [Color Universal Design (CUD): How to Make Figures and Presentations That Are Friendly to Colorblind People.](https://jfly.uni-koeln.de/color/)] --- ## Escalas de color secuenciales * Con variables continuas, usamos escalas de color secuenciales * Revelan patrones en nuestros datos que sería muy complicado ver de otra forma * Simplifican a nuestro cerebro la tarea de procesar... * ...que valores son más pequeños que otros * ...distancia entre valores * Características deseables [[A better default colormap for matplotlib](https://www.youtube.com/watch?v=xAoljeRJ3lU)]: 1. colorida 2. agradable 3. **secuencial** 4. **perceptualmente uniforme** 5. distinguible en **blanco y negro** 6. accesible para personas **daltónicas** * Una escala de color muy usada es [viridis](https://cran.r-project.org/web/packages/viridis/vignettes/intro-to-viridis.html) --- ## viridis ![](img/viridis.png) .center[Fuente: [mpl colormaps](https://bids.github.io/colormap/)] --- ## jet vs viridis .pull-left[ .center[ ![:scale 80%](img/mona-lisa-rainbow.png) ] ] -- .pull-right[ .center[ ![:scale 80%](img/mona-lisa-gradient.png) ] ] .center[.footnotesize[Fuente: [Hurricanes and Data Visualisation: Part I(b) – The Mona Lisa](https://peterjamesthomas.com/2017/09/15/hurricanes-and-data-visualisation-part-ib-the-mona-lisa/)]] --- ## Secuenciales vs divergentes .center[ ![:scale 70%](img/sequential-scales-1.png) ] -- ![:vspace 0.5] .center[ ![:scale 70%](img/diverging-scales-1.png) ] --- ## Ejemplo secuencial .center[ ![:scale 90%](img/map-Texas-income-1.png) ] --- ## Ejemplo divergente .center[ ![:scale 90%](img/map-Texas-race-1.png) ] --- ## Destacar elementos usando color * Las escalas de color qualitativas se pueden modificar para resaltar ciertos grupos: * creando versiones más oscuras y/o saturadas de algunos colores * combinando una escala de grises + color * Importante que ninguno de los colores no-resaltados destaque sobre el resto! .center[ ![:scale 75%](img/accent-scales-1.png) ] * Otra opción es eliminar todo el color excepto el de los datos a resaltar --- ## Ejemplo resaltado .center[ ![](img/Aus-athletes-track-1.png) ] --- class: inverse, middle, center # Cantidades --- ## Cantidades * Valores numéricos para un conjunto de categorías * Énfasis: magnitud de los valores * Tipos de gráfico: 1. gráfico de barras (*barplot*) 2. gráfico de puntos (*dotplot*) 3. mapas de calor (*heatmap*) --- ## Gráfico de barras <img src="00-dataviz_files/figure-html/unnamed-chunk-6-1.png" style="display: block; margin: auto;" /> --- ## Etiquetas rotadas <img src="00-dataviz_files/figure-html/unnamed-chunk-7-1.png" style="display: block; margin: auto;" /> --- ## Intercambiar ejes <img src="00-dataviz_files/figure-html/unnamed-chunk-8-1.png" style="display: block; margin: auto;" /> --- ## Orden de las categorias <img src="00-dataviz_files/figure-html/unnamed-chunk-9-1.png" style="display: block; margin: auto;" /> --- ## Variables cualitativas con orden No usar orden alfabético ni orden creciente, sino el orden implícito de la variable <img src="00-dataviz_files/figure-html/unnamed-chunk-10-1.png" style="display: block; margin: auto;" /> --- class: center, middle <img src="00-dataviz_files/figure-html/unnamed-chunk-11-1.png" style="display: block; margin: auto;" /> --- <img src="00-dataviz_files/figure-html/unnamed-chunk-12-1.png" style="display: block; margin: auto;" /> --- ## Gráfico de barras agrupadas ¿Cómo ordenar las barras? <img src="00-dataviz_files/figure-html/unnamed-chunk-14-1.png" style="display: block; margin: auto;" /> --- class: center, middle <img src="00-dataviz_files/figure-html/unnamed-chunk-15-1.png" style="display: block; margin: auto;" /> --- ## Facetas <img src="00-dataviz_files/figure-html/unnamed-chunk-16-1.png" style="display: block; margin: auto;" /> --- ## Barras apiladas * Útiles cuando las cantidades que representan por las barras apiladas es significativa * Por ejemplo, número de personas .center[ ![:scale 80%](img/titanic-passengers-by-class-sex-1.png) ] --- ## Gráfico de puntos En ocasiones podemos sustituir las barras por un únic punto <img src="00-dataviz_files/figure-html/unnamed-chunk-17-1.png" style="display: block; margin: auto;" /> --- Si lo representáramos con barras, como el eje tiene que empezar en 0, el gráfico quedaría muy cargado <img src="00-dataviz_files/figure-html/unnamed-chunk-18-1.png" style="display: block; margin: auto;" /> --- ## Gráficos de barras: ejes La cantidad de tinta debería de ser proporcional a la cantidad que se representa .center[ ![:scale 85%](img/hawaii-income-bars-bad-1.png) ] --- En una escala lineal las barras siempre tienen que empezar en 0!! .center[ ![:scale 85%](img/hawaii-income-bars-good-1.png) ] --- ## Mapas de calor (*heatmap*) Enfatizan los patrones globales en lugar de los valores concretos .center[ ![:scale 95%](img/internet-over-time-1.png) ] --- El orden es arbitrario .center[ ![:scale 95%](img/internet-over-time2-1.png) ] --- class: inverse, middle, center ## Distribuciones --- ## Histogramas * Representan la distribución de una variable numérica continua (quantitativa) <img src="00-dataviz_files/figure-html/unnamed-chunk-20-1.png" style="display: block; margin: auto;" /> --- ## Elección número de intervalos * Siempre hay que probar con distintos tamaños de intervalo! .center[ ![](img/titanic-ages-hist-grid-1.png) ] --- ## Gráficos de densidad * Estiman la densidad (distribución) de la variable usando una técnica conocidad como *Kernel Density Estimation* (KDE) * Cuidado con el rango del eje x! <img src="00-dataviz_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> --- ## Ancho del kernel * Igual que en los historgramas la elección del ancho del kernel influye en los resultados .center[ ![](img/titanic-ages-dens-grid-1.png) ] .footnotesize[ a) kernel Gaussiano, ancho = 0.5 b) kernel Gaussiano, ancho = 2 c) kernel Gaussiano, ancho = 5 d) kernel rectangular, ancho = 2 ] --- ## Dos distribuciones Los histogramas tienen problemas a la hora de mostrar múltiples distribuciones .center[ ![:scale 90%](img/titanic-age-stacked-hist-1.png) ] --- ## Transparencias .center[ ![:scale 90%](img/titanic-age-overlapping-hist-1.png) ] --- ## Gráficos de densidad solapados .center[ ![:scale 90%](img/titanic-age-overlapping-dens-1.png) ] --- ## Gráficos de densidad: facetas .center[ ![](img/titanic-age-fractional-dens-1.png) ] --- ## Histograma doble rotado .center[ ![](img/titanic-age-pyramid-1.png) ] --- # Más de dos distribuciones Si queremos representar las de dos los gráficos de densidad suelen ser preferibles a los histogramas .center[ ![:scale 90%](img/butterfat-densitites-1.png) ] --- ## Gráfico de cajas Represente los principales estadísticos de una variable continua .center[ ![:scale 80%](img/boxplot-schematic-1.png) ] --- class: center, middle ![](img/lincoln-temp-boxplots-1.png) --- .center[ ![](img/lincoln-temp-points-errorbars-1.png) ] -- Generalmente las barras verticales se usan para representar errores, no variabilidad en los datos (distribución) --- ## Gráficos "violín" * Alternativa a los gráficos de cajas si hay un número de puntos suficientemente alto * Se estima la densidad usando KDE, se rota 90 grados y se replica ![:scale 80%](img/violin-schematic-1.png) --- Las desventajas son las mismas que los gráficos de densidad: * Pueden representar datos en zonas donde no los hay * Perdemos la noción de la cantidad de puntos .center[ ![](img/lincoln-temp-violins-1.png) ] --- class: middle .center[ ![](img/seaborn-library-data-visualization-python-part-1-16.png) .footnotesize[Fuente: [Seaborn Library for Data Visualization in Python: Part 1](https://stackabuse.com/seaborn-library-for-data-visualization-in-python-part-1/)] ] --- ## *Strip chart* Si no hay muchos puntos, podemos representarlos directamente ![:scale 90%](img/lincoln-temp-all-points-1.png) --- ## Ruido aleatorio Generalmente es útil añadir un pequeño ruido aleatorio para que no se superpongan los puntos ![:scale 90%](img/lincoln-temp-jittered-1.png) --- class: middle .center[ ![](img/seaborn-library-data-visualization-python-part-1-20.png) .footnotesize[Fuente: [Seaborn Library for Data Visualization in Python: Part 1](https://stackabuse.com/seaborn-library-for-data-visualization-in-python-part-1/)] ] --- ## *Ridgeline plot* * Distribución de una variable continua para distintos grupos * Similar al gráfico "violín", pero rotado ![:scale 85%](img/temp-ridgeline-1.png) --- class: inverse, middle, center # Proporciones --- ## Gráficos circulares .pull-left[ Ventajas: * Visualiza claramente las proporciones como parte de un conjunto * Visualiza fracciones como 1/2, 1/3,.. Desventajas: * Complicado comparar visualmente las proporciones relativas ] .pull-right[ ![](img/bundestag-pie-1.png) ] --- ## Gráficos de barras apilados * Otra alternativa a los gráficos circulares * Fracciones como 1/2, 1/3, etc. no son evidente de forma visual .center[ ![:scale 90%](img/bundestag-stacked-bars-1.png) ] --- ## Gráficos de barras Permiten visualizar de forma sencilla las proporciones relativas .center[ ![:scale 75%](img/bundestag-bars-side-by-side-1.png) ] --- ## Otro ejemplo Gráfico circular .center[ ![](img/marketshare-pies-1.png) ] -- * No se pueden distinguir las diferencias entre grupos * No se pueden distinguir las diferencias entre años --- Gráfico de barras apiladas .center[ ![](img/marketshare-stacked-1.png) ] -- Excepto para los grupos A y E, no podemos compararlos visualmente --- Gráfico de barras .center[ ![](img/marketshare-side-by-side-1.png) ] --- Al igual que en los gráficos de barras que representan cantidades, el eje y tiene que empezar siempre en 0 .center[ ![](img/bar-chart-not-0.png) .footnotesize[Fuente: [A Quick Guide to Spotting Graphics That Lie](https://www.nationalgeographic.com/news/2015/06/150619-data-points-five-ways-to-lie-with-charts/)] ] --- ## Gráficos de barras apilados (dos categorías) Si solo hay dos categorías, no tenemos problema con los valores intermedios .center[ ![:scale 90%](img/women-parliament-1.png) ] --- ## Gráficos de densidad apilados * Si la variable es continua, podemos usar en su lugar un gráfico de densidad apilado * No tenemos renferencia de los valores absolutos! .center[ ![](img/health-vs-age-1.png) ] --- class: inverse, middle, center # Asociaciones de variables cuantitativas --- ## Gráfico de dispersión Gráfico de puntos que representa 2 variables numéricas continuas .center[ ![:scale 75%](img/blue-jays-scatter-1.png) ] --- ## Más de dos variables Podemos representar una tercera variable (continua o discreta) usando el color con una escala apropiada .center[ ![:scale 70%](img/blue-jays-scatter-sex-1.png) ] --- ## Facetas * Podemos usar también otros elementos estéticos del gráfico, como el tamaño de los puntos o su forma * Si el gráfico está muy cargado, es conveniente separarlo en varios sub-gráficos (facetas) .center[ ![](img/blue-jays-scatter-bubbles-1.png) ] --- ## Gráfico de pares Si tenemos más de dos variables cuantitativas, es común representar todos los pares posibles: .center[ ![:scale 75%](img/blue-jays-scatter-all-1.png) ] --- .center[ ![:scale 80%](img/seaborn-pairplot-2.png) .footnotesize[Fuente: [seaborn.pairplot](https://seaborn.pydata.org/generated/seaborn.pairplot.html)] ] --- ## Correlogramas * Para más de 3 o 4 variables, representar un gráfico de dispersión para cada uno de los pares posibles es complicado * Una opción es resumir cada gráfico de dispersión calculando la correlación de las dos variables y representar ese valor .center[ ![:scale 70%](img/correlations-1.png) ] --- ## Ejemplo * Útil usar escala de color divergente * Generalmente los límites son [-1, 1] .center[ ![:scale 50%](img/forensic-correlations1-1.png) ] --- ## Otro ejemplo * Enfatizar correlaciones altas .center[ ![:scale 50%](img/forensic-correlations2-1.png) ] --- ## Reducción de dimensionalidad .center[ ![:scale 75%](img/tsne_mnist.png) .footnotesize[Fuente: [Teaching R how to see numbers](https://rpubs.com/linalu/digit_recognizer)] ] --- class: inverse, middle, center # Series temporales y tendencias --- ## Una serie temporal Podemos utilizar puntos, pero la diferencia es que el eje x representa tiempo y por tanto están ordenados .center[ ![:scale 85%](img/biorxiv-dots-1.png) ] --- A menudo se combinan con lineas para enfatizar la dependencia temporal .center[ ![:scale 85%](img/biorxiv-dots-line-1.png) ] --- * Si los datos tienen una frecuencia temporal alta, podemos eliminar los puntos * Importante tener en cuenta que las líneas representan datos inventados! .center[ ![:scale 85%](img/biorxiv-line-1.png) ] --- **Solo** si el eje y empieza en 0, podemos colorear el area bajo la curva .center[ ![:scale 85%](img/biorxiv-line-area-1.png) ] --- class: middle .center[ ![:scale 85%](img/fb-stock-drop-bad-1.png) ] --- class: middle .center[ ![:scale 85%](img/fb-stock-drop-good-1.png) ] --- Hay que tener cuidado con las escalas! .center[ ![](img/line-chart-not-0.png) .footnotesize[Fuente: [A Quick Guide to Spotting Graphics That Lie](https://www.nationalgeographic.com/news/2015/06/150619-data-points-five-ways-to-lie-with-charts/)] ] --- ## Multiples series temporales .center[ ![:scale 90%](img/bio-preprints-dots-1.png) ] --- class: middle .center[ ![:scale 90%](img/bio-preprints-lines-1.png) ] --- * Siempre que sea posible, es conveniente etiquetar directamente el gráfico * Sobre todo si hay un número elevado de categorías (8+) .center[ ![:scale 90%](img/bio-preprints-direct-label-1.png) ] --- ## Gráficos de líneas Útiles siempre que el eje x tenga un orden implícito, aunque no represente tiempo .center[ ![:scale 90%](img/oats-yield-1.png) ] --- ## Múltiples series temporales con distintas unidades .center[ ![:scale 90%](img/house-price-unemploy-1.png) ] --- Nunca usar dos escalas distintas en el mismo gráfico! .center[ ![](img/differente_scales.png) .footnotesize[Fuente: [A Quick Guide to Spotting Graphics That Lie](https://www.nationalgeographic.com/news/2015/06/150619-data-points-five-ways-to-lie-with-charts/)] ] --- ## Tendencias * Existen distintos métodos de suavizado para representar la tendencia * Uno de los más populares es LOESS (*locally estimated scatterplot smoothing*) .center[ ![:scale 90%](img/dow-jones-loess-1.png) ] --- También es útil usar estos métodos de suavizado en gráficos de dispersión .center[ ![:scale 85%](img/tank-capacity-loess-1.png) ] --- ## Funciones de suavizado Cuidado al interpretar los datos suavizados, pueden cambiar bastante dependiendo del método! .center[ ![:scale 75%](img/tank-capacity-smoothers-1.png) ] --- ## Regresión lineal Es muy común superponer la recta de regresión para comprobar visualmente si dos variables tienen relación lineal .center[ ![:scale 70%](img/blue-jays-scatter-line-1.png) ] --- class: middle, inverse, center # Otros tipos de gráficos --- ## Más gráficos * Hemos visto los más comunes, pero hay muchos más: * Datos geoespaciales * Gráficos cuantil-cuantil * Gráficos mosaico * Mapas en árbol * Conjuntos paralelos * etc. * Un buen directorio: [From Data to Viz](https://www.data-to-viz.com/) --- ## Ratio datos-tinta * Concepto introducido por Edward Tufte en 1983 * Sin importar el tipo de gráfico, tiene que ser estéticamente agradable para no distraer del mensaje a transmitir * Consiste en maximizar la proporción de los elementos estéticos del gráfico que se usan para visualizar datos .center[ <iframe width="560" height="315" src="https://www.youtube.com/embed/bDbJBWvonVI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ] --- .center[ ![](img/data-ink.gif) ]