class: center, middle, inverse, title-slide # Visualización y Análisis en
## Sesión I ### Javier Tamayo Leiva
### Pontificia Universidad Católica de Valparaíso ### Junio 15, 2021 --- <style> .title-slide { background-size: 30%; background-position: center left; } .fa { vertical-align: middle; } .center2 { margin: 0; position: absolute; top: 50%; left: 50%; -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } body { text-align: justify; } .title-slide h1 { color: #F2EAD0; font-size: 90px; # font-family: "blacksword"; } .title-slide, .title-slide h2, .title-slide h3 { color: #FFF9F2; # font-family: 'Cormorant Garamond', serif; } .remark-slide-number { position: inherit; } .remark-slide-number .progress-bar-container { position: absolute; bottom: 0; height: 4px; display: block; left: 0; right: 0; } .remark-slide-number .progress-bar { height: 100%; background-color: #F2CB07; } .left-code { color: #777; width: 38%; height: 92%; float: left; } .right-plot { width: 60%; float: right; padding-left: 1%; } </style> .pull-left[ ### R & RStudio * Lenguaje de programación R * RStudio (IDE) ### Visualización con **ggplot2** * **tidyverse** * paquete **ggplot2** * Gráfico básico * Mapeos estéticos * Gráficos en capas * Objetos geométricos "Geoms" * Transformación estadística * Otros Ajustes ### Consideraciones generales * Color ] .rigth[ ####[R for Data Science (ES)](https://es.r4ds.hadley.nz/index.html) <img src="./Image/R4DS.png" height="550" style="background:none; border:none; box-shadow:none;"> ] --- class: inverse center middle # R & RStudio --- ### R .pull-left[ #### ¿Por qué R? 1. _Lingua Franca_ para estadística y ciencia de datos. <br><br> 1. Amplia variedad de paquetes (~20.000 CRAN). <br><br> 1. Compatibilidad (Linux, Windows, Mac). <br><br> 1. Código libre - GNU (General Public License). <br><br> 1. Extensa y diversa -amigable- comunidad. <br><br> 1. Herramientas para la visualización de alta calidad. <br><br> 1. Herramientas para la creación de aplicaciones y páginas web entre otras. <br> ] -- .pull-right[ #### ¿Cómo puedo aprender? 1. Libros (R4DS, ggplot2, Learn R Springer). <br><br> 1. Tutoriales (Datacamp, r-bloggers, etc). <br><br> 1. Cursos (Coursera, RStudio). <br><br> 1. Comunidad (Slack, Twitter, R4DS). <br> #### ¿Puedo aprender sí nunca he programado? - Si, no hay peros. ] --- ### RStudio IDE #### IDE (_integrated development environment_) .center[ <img src="./Image/rstudio-console.svg" height="480" style="background:none; border:none; box-shadow:none;"> ] --- ### Instalación .left-column[ [R](https://cran.r-project.org) - La descarga se realiza desde CRAN según sistema operartivo. [RStudio](https://www.rstudio.com/products/rstudio/download/) - La descarga se realiza desde RStudio (RStudio Desktop) .footnote[Artwork by [@allison_horst](https://twitter.com/allison_horst?lang=es)] ] .center2[ <img src="./Image/al_principio_pero_ahora.png" width="530" style="background:none; border:none; box-shadow:none;"><br> ] --- class: inverse center middle # Visualización con ggplot2 --- ## [tidyverse](https://www.tidyverse.org) <img src="./Image/Tidyverse.png" width="1200" style="background:none; border:none; box-shadow:none;"><br> --- ## La filosofía detrás de [tidyverse](https://www.tidyverse.org) .center2[ <img src="./Image/Tidiverse_philosophy.png" width="2500" style="background:none; border:none; box-shadow:none;"><br> ] .footnote[[R for Data Science (ES)](https://es.r4ds.hadley.nz/introducción.html)] --- ## La filosofía detrás de [ggplot2](https://ggplot2.tidyverse.org/index.html) .center2[ <img src="./Image/Tidiverse_ggplot2_philosophy.png" width="2500" style="background:none; border:none; box-shadow:none;"><br> ] .footnote[[R for Data Science (ES)](https://es.r4ds.hadley.nz/explorar-introduccion.html)] --- ## [ggplot2](https://ggplot2.tidyverse.org/index.html) .left-column[ <section style="text-align: LEFT;"> <br><br> Es un paquete de visualización escrito para el lenguaje R, creado por Hadley Wickham en 2005 y basado en Leland Wilkinson's "Grammar of Graphics". Un esquema general para la visualización de datos, que separa un gráfico en componentes semánticos como escalas y capas. <br> </section> ] .center2[<img src="./Image/ggplot2.png" height="520" style="background:none; border:none; box-shadow:none;"><br>] --- .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt4[ Las diapositivas estan basadas en el aprendizaje práctico y el conocimiento libre. Para eso, todas las lineas de comando son funcionales y estan pensadas para ser facilmente copiadas y pegadas. El set de datos que se usará durante la sesión, ya se encuentra precargado junto al paquete **ggplot2**. Completando cada plot adicionalmente se ganará conocimiento básico en el lenguaje de programación R, **ggplot2**, y visualización de datos. .tr[ — _Consejos_ ]] -- .bg-washed-red.b--dark-red.ba.bw2.br3.shadow-5.ph4.mt4[ Es necesario para este y próximos talleres tener o instalar R, RStudio y el paquete **tidyverse** o **ggplot2**. .tr[ — _Advertencia_ ]] -- .bg-washed-yellow.b--gold.ba.bw2.br3.shadow-5.ph4.mt4[ This is my favorite part about analytics: Taking boring flat data and bringing it to life through visualization. .tr[ — _John Tukey_ ]] --- ## paquete-**ggplot2** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("tidyverse") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("tidyverse/tidyverse") # Instalar solo ggplot2 install.packages("ggplot2") ``` ```r # Cargar desde la librería library(tidyverse) library(ggplot2) ``` -- .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt2[ Puedes cargar **ggplot2** con **tidyverse** o independientemente en tú sesión de R. <br> Para mas información, puedes escribir `help("ggplot2")` en tú consola de R. .tr[ — _Consejos_ ]] --- ## Los datos (ggplot2::diamonds) <small> Precio de mas de 50,000 diamantes cortados. </small> ```r head(diamonds) ``` ``` ## # A tibble: 6 x 10 ## carat cut color clarity depth table price x y z ## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> ## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 ## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 ## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 ## 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63 ## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 ## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 ``` ```r dim(diamonds) ``` ``` ## [1] 53940 10 ``` --- ## Gráfico básico .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat)) + geom_point() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01) </small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label-out-1.png" width="648" /> ] --- ## Comando básico ```r # Opción A ggplot(data = diamonds, mapping = aes(x= price, y= carat)) + geom_point() # Opción B ggplot(data = diamonds) + geom_point(aes(x = price, y = carat)) ``` * <span style="color:darkred" > `ggplot()`</span> : Es la función que crea un sistema de coordenadas -de forma general- a las que se incorporán capas. El primer argumento de la función es el set de datos (`data=`). Por si sola esta función no genera una <span style="color:#F95700FF" >capa</span><br> -- * <span style="color:darkred" > `data` </span> : El set de datos es una colección rectangular de datos con las variables (columnas) y sus observaciones/valores (filas) a mapear (<span style="color:#00539CFF" >diamonds</span>) <br> -- * <span style="color:darkred" > `mapping` </span> : Es donde se especifican el conjunto de variables y observaciones que se "mapean” o asignan a las <span style="color:#F95700FF" >propiedades visuales</span> a usar en el gráfico y que ejes asignar a estos valores (<span style="color:darkred" >x=</span> <span style="color:#00539CFF" >price</span>,<span style="color:darkred" >y=</span> <span style="color:#00539CFF" >carat</span>). Si no son especificadas -de forma general-, se deben indicar en cada <span style="color:#F95700FF" >capa</span> adicionada a el gráfico.<br> -- * <span style="color:darkred" > `geom_point()` </span> : Las capas del gráfico son incorporadas por las funciones o <span style="color:#F95700FF" >Geom</span>. En este caso la función agrega una <span style="color:#F95700FF" >capa</span> de puntos al gráfico. **ggplot2** incluye más de 30 funciones geom.<br> .footnote[[**ggplot2** Geoms](https://ggplot2.tidyverse.org/reference/index.html)] --- ## Objetos geométricos - **ggplot2** Geom <span style="text-align: justify;"> <br><br> Una <span style="color:#F95700FF" >capa</span> en ggplot2, combina <span style="color:#F95700FF" >datos</span>, <span style="color:#F95700FF" >propiedades visuales</span>, <span style="color:#F95700FF" >objetos geométricos (Geoms)</span>, funciones y/o transformaciones <span style="color:#F95700FF" > estadísticas (Stat)</span>, y de ajuste de la <span style="color:#F95700FF" >posición</span>.<br><br> Al crear una representación gráfica, la <span style="color:#F95700FF" >capa</span> a crear se definirá con el objeto <span style="color:#F95700FF" >Geom</span>. Sin embargo, la capa que podrás aplicar dependerá de tus datos. Las <span style="color:#F95700FF" >capas</span>, tambien te permitirán combinar distintos set de datos en una única representación gráfica. Esta es una de las caracteristicas que te permitirá crear gráficos sofisticados. </span> -- .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt5[ Puedes aplicar las capas oficiales que se encuentrán cargadas en el paquete **ggplot2** o usar funciones Geom complementarias desde otros paquetes de R. .tr[ — _Consejos_ ]] .footnote[[ggplot2 extensions](https://exts.ggplot2.tidyverse.org/gallery/)] --- ## **ggplot2** Propiedades Visuales .pull-left[ ### Propiedades Visuales Requeridas * <span style="color:#F95700FF" >X </span><br> * <span style="color:#F95700FF" >Y </span>(Dos variables)<br> ] .pull-right[ ### Propiedades Visuales Variables * <span style="color:#F95700FF" >Color or Colour </span><br> * <span style="color:#F95700FF" >Fill </span><br> * <span style="color:#F95700FF" >Size </span><br> * <span style="color:#F95700FF" >Shape </span><br> * <span style="color:#F95700FF" >Linetype </span><br> * <span style="color:#F95700FF" >Alpha </span>(transparency) <br> * <span style="color:#F95700FF" >Group </span><br> * <span style="color:#F95700FF" >Label </span><br> * <span style="color:#F95700FF" >Stroke </span><br> * <span style="color:#F95700FF" >...</span><br> ] -- .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt4[ Puedes aprender más sobre estas opciones tipeando `vignette("ggplot2-specs")` en tú sesión de R. .tr[ — _Consejos_ ]] --- ## La práctica... .center2[<img src="./Image/ggplot2_obra_maestra.png" height="500" style="background:none; border:none; box-shadow:none;"><br>] .footnote[Artwork by [@allison_horst](https://twitter.com/allison_horst?lang=es)] --- ## Volvamos al gráfico básico .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat)) + geom_point() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01) </small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_2-out-1.png" width="648" /> ] -- <small> Mayor peso significa un mayor costo ¿Siempre? </small> --- ## ¿Qué información adicional podemos usar?
--- class: inverse center middle ## Mapeos estéticos --- ### Podemos agregar una variable distintiva al color .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() ``` > <small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> > <small> ggplot2 asigna automáticamente un nivel único de la estética (ejemplo, un color) a cada valor único de la variable. Este proceso es conocido como escalamiento ( _scaling_ ). </small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_3-out-1.png" width="648" /> ] --- ### Podemos agregar también una variable fija a el color .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat)) + geom_point(color = "darkblue") ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_3b-out-1.png" width="648" /> ] --- ### Podemos agregar una variable a la forma .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color, shape = cut)) + geom_point() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte </small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_4-out-1.png" width="648" /> ] -- <small> Poco a poco se hace complejo distinguir variables, probemos otra... </small> --- ### Podemos agregar una variable al el tamaño .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color, size = cut)) + geom_point() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte </small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_5-out-1.png" width="648" /> ] -- <small> ¿Qué podemos hacer?</small> --- ### No saturar con información <medium> Dependiendo del set de datos se pueden incorporar de 3 a 4 variables. Un mayor número de variables es complejo de visualizar y es recomendable usar otras aproximaciones. Aplicar el principio minimalista. </medium> <center><figure><img src="./Image/Farnsworth_House.jpg" height="280" width="560" style="background:none; border:black; box-shadow:none;"><figcaption>Farnsworth House (1951), Illinois, USA.</figcaption></figure></center> .bg-washed-yellow.b--gold.ba.bw2.br3.shadow-5.ph4.mt2[ Less is more! .tr[ — _Ludwig Mies Van Der Rohe_ ]] --- class: inverse center middle ## Gráficos en capas --- ### ¿Podriamos usar otros objetos geométricos? .pull-left[ ### Una variable * geom_bar() <br> * geom_histogram() <br> * geom_density() <br> * geom_area() <br> * geom_dotplot() <br> * geom_freqpoly() <br> * geom_histogram() <br> * geom_qq() <br> ### Tres variables * geom_contour() <br> * geom_tile() <br> * geom_raster() <br> ] .pull-right[ ### Dos variables * geom_point() <br> * geom_jitter() <br> * geom_col() <br> * geom_line() <br> * geom_smooth() <br> * geom_quantile()<br> * geo_boxplot()<br> * ... <br> ### Visualizando el Error * geom_crossbar() <br> * geom_errorbar() <br> * geom_linerange() <br> * geom_pointrange() <br> ] --- ### Agregar un objeto Geom o capa .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + geom_smooth() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_7-out-1.png" width="648" /> ] --- ### Agregar un objeto Geom o capa .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + geom_smooth(color = "black") ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_7b-out-1.png" width="648" /> ] --- ### Agregar un objeto Geom o capa a un grupo en particular .left-code[ ```r ggplot(data = filter(diamonds, cut == "Premium"), mapping = aes(x = price, y = carat, color = color)) + geom_point() + geom_smooth() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_7c-out-1.png" width="648" /> ] --- ### Agregar un objeto Geom o capa a un grupo en particular .left-code[ ```r ggplot(data = filter(diamonds, cut == "Premium" & clarity == "IF"), mapping = aes(x = price, y = carat, color = color)) + geom_point() + geom_smooth() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte<br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_7d-out-1.png" width="648" /> ] --- ### Agregar un objeto Geom o capa a un grupo en particular .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + geom_smooth(data = filter(diamonds, color == "D")) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_7e-out-1.png" width="648" /> ] --- ### ¿Qué historia nos interesa contar? .pull-left[ - ¿Hay homogeneidad entre grupos?<br><br> - ¿Hay grupos que difieren de la tendencia general?<br><br> - ¿Hay datos que difieren de la mayoría (outliers)?<br><br> - ¿Hay algún cambio drástico?<br><br> - ¿Hay alguna tendencia en el tiempo o variable de interés?<br><br> - ¿Hay datos que se comportan contrarío a lo descrito?<br><br> - ¿Que mensaje quiero transmitir?<br><br> - ... <br> ] <center><img src="./Image/ggplot2_exploration_es.png" height="500" style="background:none; border:black; box-shadow:none;"></center> .footnote[Artwork by [@allison_horst](https://twitter.com/allison_horst?lang=es)] --- ### Revisemos la información .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_8-out-1.png" width="648" /> ] --- ### Revisemos el tamaño de los grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = color, color = color)) + geom_bar() ``` > <br><small> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small></small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9-out-1.png" width="648" /> ] -- <small> ¿Qué ocurre si ocupamos `fill` y no `color`?</small> --- ### Revisemos el tamaño de los grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = color, fill = color)) + geom_bar() ``` > <br><small> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small></small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9b-out-1.png" width="648" /> ] <small> ¿Qué ocurre si ocupamos `fill` y no `color`?</small> --- class: inverse center middle ## Transformación estadística --- ### Transformación estadística Algunos objetos Geom, intrínsicamente generan transformaciones estadísticas a los datos para poder gráficar su geometría. Algunos ejemplos corresponden a: -- * Gráficos de barras `geom_bar()`, histogramas `geom_histogram()` y polígonos de frecuencia `geom_polygon()` los que almacenan los datos y luego grafican las cuentas ( _count_) por contenedores ( _bins_). <br><br> -- * Gráficos de líneas suavizadas ( _smoothers_) `geom_smooth()`el que ajusta un modelo a los datos y luego grafica las predicciones del modelo. <br><br> -- * Diagramas de caja `geom_boxplot()` el que calcula un resumen robusto de la distribución (Q1,Q2,Q3,Q4) y luego muestra su formato especial. <br><br> -- Todas estas tranformaciones son realizadas por elementos llamados _stat_ ( _**stat**istical transformation_). En el caso de las cuentas el elemento se llama `stat_count()` --- ### Revisemos el tamaño de los grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = color, fill = color)) + stat_count() ``` > <br><small> color : Desde D (Mejor) a J (peor)</small></small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9c-out-1.png" width="648" /> ] --- ### Revisemos el tamaño de los grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = cut, fill = color)) + geom_bar() ``` > <br><small> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small></small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9d-out-1.png" width="648" /> ] --- ### Revisemos la cantidad por grupos ajustando la posición .left-code[ ```r ggplot(data = diamonds, aes(x=cut, fill=color)) + geom_bar(position = "dodge") ``` > <br><small> color : Desde D (Mejor) a J (peor) <br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9e-out-1.png" width="648" /> ] --- ### Revisemos la cantidad por grupos ajustando la posición .left-code[ ```r ggplot(data = diamonds, aes(x=cut, fill=color)) + geom_bar(position = "fill") ``` > <br><small> color : Desde D (Mejor) a J (peor) <br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9f-out-1.png" width="648" /> ] --- ### Revisemos el tamaño de los grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = clarity, fill = color)) + geom_bar() ``` > <br><small> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_9g-out-1.png" width="648" /> ] --- ### Revisemos la tendencia general de los datos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_10-out-1.png" width="648" /> ] --- ### Revisemos la tendencia general de los datos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = clarity)) + geom_smooth() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_10b-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos .left-code[ ```r ggplot(data = diamonds, aes(x=color, y=price, color=color)) + geom_boxplot() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos .left-code[ ```r ggplot(data = diamonds, aes(x=cut, y=price, color=cut)) + geom_boxplot() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11b-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos combinados .left-code[ ```r ggplot(data = diamonds, aes(x=cut, y=price, color=color)) + geom_boxplot() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11c-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos combinados .left-code[ ```r ggplot(data = diamonds, aes(x=cut, y=price, fill=color)) + geom_boxplot(outlier.colour = NA) # Elimina los outliers ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11d-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = cut, y = carat)) + stat_summary(fun.min = min, fun.max = max, fun = median) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11e-out-1.png" width="648" /> ] --- ### Revisemos la distribución por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = cut, y = carat, color = color)) + stat_summary(fun.min = min, fun.max = max, fun = median, position = position_dodge(width = 0.7)) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_11g-out-1.png" width="648" /> ] --- class: inverse center middle ## Otros Ajustes ### Estrategias para visualizar datos agrupados --- ### Revisemos la tendencia general por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + facet_wrap(vars(cut)) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_12-out-1.png" width="648" /> ] --- ### Revisemos la tendencia general por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + facet_grid(clarity~cut) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte <br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_12b-out-1.png" width="648" /> ] <small> ¿Qué determina el precio?</small> --- ### Revisemos la tendencia general por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + facet_grid(cut~clarity) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte <br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_12c-out-1.png" width="648" /> ] <small> ¿Qué determina el precio?</small> --- ### Revisemos la tendencia general por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + facet_grid(.~cut) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte <br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_12d-out-1.png" width="648" /> ] <small> ¿Qué determina el precio?</small> --- ### Revisemos la tendencia general por grupos .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + facet_grid(cut~.) ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)<br><br> cut : Calidad del corte <br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_12e-out-1.png" width="648" /> ] <small> ¿Qué determina el precio?</small> --- class: inverse center middle ## Otros Ajustes ### Estrategias para ordenar datos --- ### Ordenar columnas por cuentas ascendentes .left-code[ ```r ggplot(data = diamonds %>% group_by(color) %>% slice_max(price, n=1), mapping = aes(x = price, y = color, color = color)) + geom_point(size = 4) ``` > <small>`group_by` {dplyr} permite agrupar por una o más variables un set de datos. En el ejemplo <span style="color:#00539CFF" >color</span>.</small><br><br> > <small>`slice_max` {dplyr} permite extraer n valores máximos. En el ejemplo extraerá el valor máximo de <span style="color:#00539CFF" >price</span> según cada grupo <span style="color:#00539CFF" >color</span>.</small><br> .footnote[[group_by](https://dplyr.tidyverse.org/reference/group_by.html), [slice_max](https://dplyr.tidyverse.org/reference/slice.html) {dplyr}] ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13-out-1.png" width="648" /> ] --- ### Ordenar columnas por cuentas ascendentes .left-code[ ```r ggplot(data = diamonds %>% group_by(color) %>% slice_max(price, n=1), mapping = aes(x = price, y = fct_reorder(color, price), color = fct_reorder(color, price, .desc = TRUE))) + geom_point(size = 4) ``` > <small>`group_by` {dplyr} permite agrupar por una o más variables un set de datos. En el ejemplo <span style="color:#00539CFF" >color</span>.</small><br><br> > <small>`slice_max` {dplyr} permite extraer n valores máximos. En el ejemplo extraerá el valor máximo de <span style="color:#00539CFF" >price</span> según cada grupo <span style="color:#00539CFF" >color</span>.</small><br> .footnote[[group_by](https://dplyr.tidyverse.org/reference/group_by.html), [slice_max](https://dplyr.tidyverse.org/reference/slice.html) {dplyr}] ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13b-out-1.png" width="648" /> ] --- ### Ordenar columnas por cuentas ascendentes (Problema) .left-code[ ```r ggplot(data = diamonds %>% group_by(clarity) %>% slice_max(price, n=1), mapping = aes(x = price, y = fct_reorder(clarity, price), color = clarity)) + geom_point(size = 4) ``` > <small>`group_by` {dplyr} permite agrupar por una o más variables un set de datos. En el ejemplo <span style="color:#00539CFF" >color</span>.</small><br><br> > <small>`slice_max` {dplyr} permite extraer n valores máximos. En el ejemplo extraerá el valor máximo de <span style="color:#00539CFF" >price</span> según cada grupo <span style="color:#00539CFF" >color</span>.</small><br> .footnote[[group_by](https://dplyr.tidyverse.org/reference/group_by.html), [slice_max](https://dplyr.tidyverse.org/reference/slice.html) {dplyr}] ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13c-out-1.png" width="648" /> > La leyenda esta desordenada ] --- ### Ordenar variables por valor máximo ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = clarity)) + geom_smooth() # Variables ordenadas por su cordenada valor de y en x máximo ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = forcats::fct_reorder2(clarity, price, carat))) + geom_smooth() + labs(color="clarity") ``` .center[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13d-out-1.png" width="324" /><img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13d-out-2.png" width="324" /> ] --- ### Ordenar columnas por cuentas ascendentes .left-code[ ```r ggplot(data = diamonds %>% mutate(color = color %>% fct_infreq() %>% fct_rev()), mapping = aes(x = color, fill = color)) + geom_bar() ``` > <br><small> color : Desde D (Mejor) a J (peor)</small><br><br> > `mutate` {dplyr} permite modificar o crear nuevas columnas dentro de un set de datos. .footnote[[mutate](https://dplyr.tidyverse.org/reference/mutate.html) {dplyr}] ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13e-out-1.png" width="648" /> ] --- ### Ordenar variables manualmente .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = forcats::fct_relevel(clarity, "I1", "VS2", "SI2", "SI1", "VS1", "VVS2", "VVS1", "IF"))) + geom_smooth() + labs(color = "clarity") ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> clarity : Claridad I1 (peor), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (Mejor)</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_13f-out-1.png" width="648" /> ] --- class: inverse center middle ## Otros Ajustes ### Modificar la estética del gráfico para elementos que no son datos --- ### Temas incluidos en ggplot2 <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_14-1.png" width="1152" /> .footnote[[Temas](https://ggplot2.tidyverse.org/reference/ggtheme.html) {ggplot2}] --- ### Temas en ggplot2 Un tema en **ggplot2** corresponde a un conjunto de parámetros estéticos que son accesorios a los datos representados en el gráfico. Estos parámetros corresponden a el texto de los ejes, líneas, color de fondo entre muchos otros parámetros, que con práctica se harán muy fáciles de manipular. Para seleccionar un tema en ggplot debes agregarlo como si fuera una capa adicional.<br> ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + theme_gray() # Tema por defecto en ggplot2. El resultado de este comando es # el mismo que al no llamar theme_gray() ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + theme_classic() # Tema clásico minimalista ## Modificar un tema manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + theme(axis.text = element_text(size = 8)) # Modificar solo el tamaño del texto en los ejes # con theme_gray() por defecto. Tambien podrías # colocarlo posterior a theme_classic(), para # modificar el elementos sobre ese tema. ``` .footnote[[Modificar elementos de un tema manualmente](https://ggplot2.tidyverse.org/reference/theme.html) {ggplot2}] --- ### Leyendas en ggplot2 Adicionalmente en **ggplot2** podemos modificar los títulos de los ejes (x,y), título principal, o subtítulos fácilmente con la función `labs()`. .left-code[ ```r # Para seleccionar un tema en ggplot # debes agregarlo como si fuera una # capa adicional ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + theme_classic() + # Tema clásico minimalista labs(title = "Diamantes", subtitle = "Datos de sobre 50.000 diamantes cortados", x = "Precio (USD)", y = "Peso del Diamante", colour = "Color") ``` .footnote[[Modificar leyendas](https://ggplot2.tidyverse.org/reference/labs.html) {ggplot2}] ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_14b-out-1.png" width="648" /> ] --- class: inverse center middle ## Otros Ajustes ### Modificar Escalas --- ### Escala Logarítmica .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + scale_y_log10() + scale_x_log10() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> Escala no lineal apropiada cuando los datos muestran una gran dispersión. <br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_15-out-1.png" width="648" /> ] --- ### Escala Cuadratíca .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + scale_y_sqrt() + scale_x_sqrt() ``` > <br><small> price : Precio del diamante en US dolares ($326–$18,823)<br><br> carat : Peso del diamante (0.2–5.01)<br><br> color : Desde D (Mejor) a J (peor)</small><br><br> Apropiada para datos expresados de forma cuadrática, por ejemplo m2, km2.<br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_15b-out-1.png" width="648" /> ] --- ### Escala Invertida .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + scale_y_reverse() + scale_x_reverse() ``` > <br><small> color : Desde D (Mejor) a J (peor) <br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_15c-out-1.png" width="648" /> ] --- ## paquete-**scales** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("scales") ``` ```r # Cargar desde la librería library(scales) ``` .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt2[ Para mas información, puedes escribir `help("scales")` en tú consola de R. .tr[ — _Consejos_ ]] --- ### Modificar escalas .left-code[ ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_smooth() + scale_x_continuous(labels = scales::dollar) ``` > <br><small> color : Desde D (Mejor) a J (peor) <br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_15d-out-1.png" width="648" /> ] --- ### Modificar escalas .left-code[ ```r ggplot(data = diamonds, aes(x=cut, fill=color)) + geom_bar(position = "fill") + scale_y_continuous(labels = scales::percent) ``` > <br><small> color : Desde D (Mejor) a J (peor) <br><br> cut : Calidad del corte</small><br><br> ] .right-plot[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_15e-out-1.png" width="648" /> ] --- class: inverse center middle ## Otros Ajustes ### Guardar un gráfico --- ### Guardar un gráfico creado en **ggplot2** ```r # Opción 1 ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() ## Guardarlo ggsave("nombre.pdf") ## Guardarlo con especificaciones ggsave("nombre.pdf", width = 20, height = 20, units = "cm") ggsave("nombre.png", width = 20, height = 20, units = "cm") ggsave("nombre.tiff", width = 20, height = 20, units = "cm") # Opción 2 pdf("nombre.pdf") ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() dev.off() png("nombre.png") ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() dev.off() ``` ><small> Dispositivos: "eps", "ps", "tex", "pdf", "jpeg", "tiff", "png", "bmp", "svg"<br> units (unidades): "in", "cm", "mm"<br> dpi (resolución del gráfico): "retina" (320), "print" (300), or "screen" (72)</small> --- class: inverse center middle # Consideraciones generales ## Color --- ## Escalas de color .pull-left[ .center[ <img src="./Image/Color_Scale_1.png" height="250" style="background:none; border:none; box-shadow:none;"> <img src="./Image/Color_Scale_2.png" height="150" style="background:none; border:none; box-shadow:none;"> ] ] .pull-right[ Cada escala de color tiene una función asociada con su tipo de variable.<br><br> <img src="./Image/Color_Scale.png" height="250" style="background:none; border:none; box-shadow:none;"> ] .footnote[ [Spectrum Adobe](https://spectrum.adobe.com/page/color-for-data-visualization/) <br> [Which color scale to use when visualizing data - Lisa Charlotte Rost](https://blog.datawrapper.de/which-color-scale-to-use-in-data-vis/)] --- ## Escala de color según variable
.footnote[ [Spectrum Adobe](https://spectrum.adobe.com/page/color-for-data-visualization/) <br> [Which color scale to use when visualizing data - Lisa Charlotte Rost](https://blog.datawrapper.de/which-color-scale-to-use-in-data-vis/)] --- ### Paletas de Color {RColorBrewer} .pull-left[ **RColorBrewer** posee tres tipos de paletas de color:<br><br> - **Paletas Sequenciales**: Adecuadas para datos ordenados que incrementan su magnitud.<br><br> - **Paletas Categóricas**: No implican magnitudes diferentes de los niveles del factor, y son solo usados para crear un diferencia visual entre los niveles del factor.<br><br> - **Paletas Divergentes**: Adecuadas para datos dicotómicos, poniendo igual enfasís en los rangos bajos-medios (neutrales) y máximos a ambos extremos de los rangos.<br><br> .footnote[[{RColorBrewer}](https://rdrr.io/cran/RColorBrewer/man/ColorBrewer.html)] ] .pull-right[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17-1.png" width="648" /> ] --- ### Paletas de Color {RColorBrewer} <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17b-1.png" width="1152" style="display: block; margin: auto;" /> --- ### Paletas de Color {viridis} .pull-left[ **viridis** posee paletas de color diseñadas para mejorar la interpretación de personas con distintas formas de daltonismo y/o deficiencia de la visión del color:<br><br> - **Paletas Sequenciales**: Adecuadas para datos ordenados que incrementan su magnitud.<br><br> - Coloridas: Ocupan una amplia variedad de colores.<br><br> - Uniformes: Colores similares son asociados con valores similares.<br><br> - Robustas: Colores que permiten la interpretación de personas con formas comunes de daltonismo y/o deficiencia de la visión del color.<br><br> .footnote[[{viridis}](https://cran.r-project.org/web/packages/viridis/vignettes/intro-to-viridis.html)] ] .pull-right[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17c-1.png" width="648" /> ] --- ### Paletas de Color {viridis} <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17d-1.png" width="1152" style="display: block; margin: auto;" /> --- ## paquetes-**RColorBrewer** & **viridis** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("RColorBrewer") install.packages("viridis") ``` ```r # Cargar desde la librería library(RColorBrewer) library(viridis) ``` .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt2[ Para mas información, puedes escribir `help("RColorBrewer")` o `help("viridis")` en tú consola de R. .tr[ — _Consejos_ ]] --- ### ¿Cómo implementar paletas categóricas en mi gráfico? Dependiendo del mapeo estético, se debe utilizar `scale_color_*()` o `scale_fill_*()`. <br> ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + scale_color_brewer(palette = "YlGnBu") # scale_fill_brewer(palette = "YlGnBu") ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + scale_color_viridis(option = "magma", discrete = TRUE) # scale_fill_viridis(option = "magma", discrete = TRUE) ## Agregar una escala de color manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = color)) + geom_point() + scale_color_manual(values = c("#E69F00","#56B4E9","#009E73","#F0E442", "#0072B2","#D55E00","#CC79A7","#000000")) ``` --- ### ¿Cómo implementar paletas categóricas en mi gráfico? <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17f-1.png" width="1152" style="display: block; margin: auto;" /> --- ### ¿Cómo implementar paletas sequenciales y/o divergentes en mi gráfico? Dependiendo del mapeo estético, se debe utilizar `scale_color_*()` o `scale_fill_*()`. <br> ```r ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_colour_distiller(palette = "YlGnBu") ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_color_viridis(option = "magma", discrete = FALSE) ## Agregar una paleta sequencial manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_color_gradient(low ="blue", high ="white") ## Agregar una paleta sequencial clasificada manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_colour_steps(low ="blue", high ="white") ## Agregar una paleta divergente manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_color_gradient2(low ="red", mid = "white", high ="blue") ## Agregar una paleta divergente clasificada manualmente ggplot(data = diamonds, mapping = aes(x = price, y = carat, color = depth)) + geom_point() + scale_colour_steps2(low ="red", mid = "white", high ="blue") ``` --- ### ¿Cómo implementar paletas sequenciales y/o divergentes en mi gráfico? <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17h-1.png" width="1152" style="display: block; margin: auto;" /> --- ### Errores comunes del uso del color .pull-left[ 1. **Uso ineficiente del color para asignar niveles**. <br><br> 1. Asignar colores diferenciales a la misma variable. <br><br> 1. Uso de paletas de color no monotónicas. <br><br> 1. Uso de paletas de color no pensadas para deficiencías en la percepción de color. <br><br><br> ><small>Como recomendación núnca utilizar más de 8 colores (idealmente hasta 5) para mostrar categorías distintas.</small> ] .pull-right[ <img src="./Image/dataviz_pitfalls_color_1.png" height="450" style="background:none; border:none; box-shadow:none;"> ] .footnote[[Fundamentals of Data Visualization - Claus Wilke - (Chapter 19) Common pitfalls of color use](https://clauswilke.com/dataviz/color-pitfalls.html)] --- ### Errores comunes del uso del color .pull-left[ 1. Uso ineficiente del color para asignar niveles. <br><br> 1. **Asignar colores diferenciales a la misma variable**. <br><br> 1. Uso de paletas de color no monotónicas. <br><br> 1. Uso de paletas de color no pensadas para deficiencías en la percepción de color. <br><br> ] .pull-right[ <img src="./Image/dataviz_pitfalls_color_2.png" height="450" style="background:none; border:none; box-shadow:none;"> ] .footnote[[Fundamentals of Data Visualization - Claus Wilke - (Chapter 19) Common pitfalls of color use ](https://clauswilke.com/dataviz/color-pitfalls.html)] --- ### Errores comunes del uso del color .pull-left[ 1. Uso ineficiente del color para asignar niveles. <br><br> 1. Asignar colores diferenciales a la misma variable. <br><br> 1. **Uso de paletas de color no monotónicas**. <br><br> 1. Uso de paletas de color no pensadas para deficiencías en la percepción de color. <br><br> ] .pull-right[ <img src="./Image/dataviz_pitfalls_color_3.png" height="300" style="background:none; border:none; box-shadow:none;"> ] .footnote[[Fundamentals of Data Visualization - Claus Wilke - (Chapter 19) Common pitfalls of color use ](https://clauswilke.com/dataviz/color-pitfalls.html)] --- ### Errores comunes del uso del color .pull-left[ 1. Uso ineficiente del color para asignar niveles. <br><br> 1. Asignar colores diferenciales a la misma variable. <br><br> 1. Uso de paletas de color no monotónicas. <br><br> 1. **Uso de paletas de color no pensadas para deficiencías en la percepción de color**. <br><br> ] .pull-right[ .center[ <img src="./Image/dataviz_pitfalls_color_4.png" height="100" style="background:none; border:none; box-shadow:none;"> <img src="./Image/dataviz_pitfalls_color_5.png" height="300" style="background:none; border:none; box-shadow:none;"> ] ] .footnote[[Fundamentals of Data Visualization - Claus Wilke - (Chapter 19) Common pitfalls of color use ](https://clauswilke.com/dataviz/color-pitfalls.html)] --- ### Sugerencias frente a errores comunes del uso del color .pull-left[ Evitar las paletas tipo "Rainbow". Utilizar paletas con gradientes monotónicos.<br><br> - **Paletas Sequenciales**: Adecuadas para datos ordenados que incrementan su magnitud.<br><br> - **viridis**<br><br> - **RColorBrewer** (Paletas *seq*).<br><br> - **Paletas Divergentes**: Adecuadas para datos dicotómicos - **RColorBrewer** (Paletas *div*).<br><br> ] .pull-right[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17i-1.png" width="648" /> ] --- ### Sugerencias frente a errores comunes del uso del color .pull-left[ **Okabe and Ito (2008)** Paleta de color para escalas discretas diseñada para mejorar la interpretación de personas con daltonismo:<br> | Color | Código Hex | |----------------|------------| | orange | #E69F00 | | sky blue | #56B4E9 | | bluish green | #009E73 | | yellow | #F0E442 | | blue | #0072B2 | | vermilion | #D55E00 | | reddish purple | #CC79A7 | | black | #000000 | .footnote[[Fundamentals of Data Visualization - Claus Wilke - (Chapter 19) Common pitfalls of color use ](https://clauswilke.com/dataviz/color-pitfalls.html) <br> [Okabe and Ito (2008)](https://jfly.uni-koeln.de/color/)] ] .pull-right[ .center[ <img src="data:image/png;base64,#Sesion_001_files/figure-html/plot-label_17j-1.png" width="324" /> ] ] --- .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt4[ 1. Intentar siempre ser consistente en el uso de color (no cambiar el color de las categorías entre un gráfico y otro).<br><br> 1. Evitar el uso de todo el espectro de color. Utilizar matices del mismo color es una buena estrategía.<br><br> .tr[ — _Consejos_ ]] .center[ <img src="./Image/dataviz_pitfalls_color_6.png" height="300" style="background:none; border:none; box-shadow:none;"> ] .footnote[[Quantitative vs qualitative color scales - Lisa Charlotte Rost](https://blog.datawrapper.de/quantitative-vs-qualitative-color-scales/)] --- .bg-washed-red.b--dark-red.ba.bw2.br3.shadow-5.ph4.mt4[ No existe una combinación de color que sea efectiva en el 100% de los casos, comprobar las características de tú paleta de color es siempre necesario. El color del fondo, el tamaño del objeto coloreado, y/o el número de datos pueden influir en la percepción diferencial de los distintos niveles.<br> .tr[ — _Advertencia_ ]] .bg-washed-green.b--dark-green.ba.bw2.br3.shadow-5.ph4.mt4[ .center[ En el siguiente link pueden revisar si su paleta de color es adecuada (daltonismo y contraste).<br> [Viz Palette - Susie Lu & Elijah Meeks](https://projects.susielu.com/viz-palette)<br> ] .tr[ — _Consejos_ ]] --- ### ¿Donde consultar otras paletas de color? .center[ Buscar paletas de color <br><br><br> [EmilHvitfeldt/r-color-palettes](https://github.com/EmilHvitfeldt/r-color-palettes)<br><br> [Abobe Color](https://color.adobe.com/create/color-wheel)<br><br> [Color Scheme Designer](https://colorschemedesigner.com/csd-3.5/)<br><br> [i want hue](https://medialab.github.io/iwanthue/)<br><br> ] --- class: center, middle # Muchas Gracias!! Presentación creada en R con los paquetes: [xaringan](https://github.com/yihui/xaringan)<br> [xaringanthemer](https://github.com/gadenbuie/xaringanthemer)<br> [R Markdown](https://rmarkdown.rstudio.com).<br>