class: inverse, center # <svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 581 512"><path d="M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"/></svg> para análisis de datos <br> <br> ## `Visualización` <br> <br> <br> .large[Roxana N. Villafañe | LEMyP | <a href='http://twitter.com/data_datum'><svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> @data_datum</a>] <br> .large[Florencia D'Andrea | INTA-CONICET | <a href="http://twitter.com/cantoflor_87"> <svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> @cantoflor_87</a><br>] <br><br><br><br><br> Slides disponibles en <https://flor14.github.io/visualizacion_2020/visualizacion#1> ✨ <br> Página web del curso en <https://flor14.github.io/Curso_r_unne_2020/> 🌟 --- # Exploración de datos <img src="visualizar.png" width="928" style="display: block; margin: auto;" /> .footnote[**Fuente**: https://es.r4ds.hadley.nz/explorar-introduccion.html] --- class: center, middle # Paquete `ggplot2` <img src="hex.png" width="300px" style="display: block; margin: auto;" /> --- # Guía Rápida <img src="cheatsheet.png" width="600px" style="display: block; margin: auto;" /> .footnote[**Fuente**: RStudio Cheatsheet] --- <img src="hex.png" width="10%" align="right" /> # Gramática de los gráficos ```r ggplot(data = `<DATOS>`) + `<GEOM_FUNCIÓN>`(mapping = aes(`<MAPEOS ESTÉTICOS>`)) ``` <img src="graficos.png" width="600px" style="display: block; margin: auto;" /> .footnote[**Fuente**: RStudio Cheatsheet] --- <img src="hex.png" width="10%" align="right" /> # Gramática de los gráficos ```r ggplot(data = `<DATOS>`) + `<GEOM_FUNCIÓN>`(mapping = aes(`<MAPEOS ESTÉTICOS>`)) ``` <img src="layers_1.png" width="600px" style="display: block; margin: auto;" /> .footnote[**Fuente**: RStudio Cheatsheet] --- <img src="hex.png" width="10%" align="right" /> # Datos Dataset `millas` en español traducido por la comunidad **R4DS** <img src="r4dses.png" width="200px" style="display: block; margin: auto;" /> --- class: middle, inverse # Función Geom 📈 --- <img src="hex.png" width="10%" align="right" /> # Función Geom ```r ggplot(data = <DATOS>) + `<GEOM_FUNCIÓN>`(mapping = aes(<MAPEOS>)) ``` Las funciones `geom_*()` determinan la representación gráfica de los datos. Cada función geom que uso forma una capa. <img src="geom_examples.png" width="200px" style="display: block; margin: auto;" /> .footnote[**Fuente**: RStudio Cheatsheet] --- class: middle, inverse # Mapeos --- <img src="hex.png" width="10%" align="right" /> # Mapeos El mapeo entre las propiedades estéticas de tu gráfico y las variables de tu dataset te permite comunicar información sobre tus datos. ```r library(tidyverse) library(datos) ggplot(data = <DATOS>) + <GEOM_FUNCIÓN>(mapping = `aes(<MAPEOS>)`) ``` --- <img src="hex.png" width="10%" align="right" /> # Mapeos Para mapear (o asignar) una estética a una variable, debes asociar el nombre de la estética al de la variable dentro de `aes()`. <img src="aes.png" width="500px" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> Puedo incluir información de 3 variables ```r library(tidyverse) library(datos) ggplot(data = millas) + geom_point(mapping = aes(x = motor, y = autopista, color = clase)) ``` <img src="visualizacion_files/figure-html/ggplot2-1.png" style="display: block; margin: auto;" /> --- class: middle, inverse, center # 💡💻 # Demo #1 Generar un gráfico con `ggplot2` Modificar las funciones `geom` y los mapeos --- <img src="hex.png" width="10%" align="right" /> # Ejercicio ¿Por qué los puntos se ven rosados? ¿Qué pasa si sacas el argumento `color = "blue"` fuera de `aes()`? ```r ggplot(data = millas) + geom_point(mapping = aes(x = motor, y = autopista, color = "blue")) ``` <img src="visualizacion_files/figure-html/rere-1.png" style="display: block; margin: auto;" /> --- class: middle <img src="hex.png" width="10%" align="right" /> # Variable categórica Una variable es categórica si solo puede tomar uno de un pequeño conjunto de valores -> **gráfico de barras** 📊 # Variable continua Una variable es continua si puede tomar cualquiera de un conjunto infinito de valores -> **histograma** 📊 --- <img src="hex.png" width="10%" align="right" /> # Algunos ejemplos de gráficos <img src="cajas.png" width="900px" /> --- class: middle, inverse # Gráfico de Barras --- <img src="hex.png" width="10%" align="right" /> # `geom_bar()` Grafico una variable ```r library(tidyverse) ggplot(diamonds) + geom_bar(aes(x = color)) ``` <img src="visualizacion_files/figure-html/bar-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # Argumentos `color` y `fill` Agrego una segunda variable en forma de color <img src="fill vs color.png" width="600px" style="display: block; margin: auto;" /> .footnote[**Fuente**: RStudio Primers - Visualize data] --- <img src="hex.png" width="10%" align="right" /> # Cuidado! position = "fill" position = "stack" position = "dodge" <img src="position_adj.png" width="400px" style="display: block; margin: auto;" /> Recomiendo: [RStudio Primers](https://rstudio.cloud/learn/primers/3.2) --- class: middle, inverse, center # 💡💻 # Demo #2 Genero un gráfico de barras. ¿Qué pasa si modifico el argumento `position`? --- class: middle, inverse # Histograma --- <img src="hex.png" width="10%" align="right" /> # Histograma Ajusta el ancho de las barras con el argumento `binwidth` <img src="visualizacion_files/figure-html/histo-1.png" style="display: block; margin: auto;" /> --- class: middle, inverse # Diagrama de caja --- <img src="hex.png" width="10%" align="right" /> # Diagrama de caja Los diagramas de caja representan gráficamente a los datos a través de sus cuartiles. <img src="boxplot_imagen.png" width="400px" style="display: block; margin: auto;" /> --- # Diagrama de caja ```r library(datos) ggplot(data = millas, mapping = aes(x = clase, y = autopista)) + geom_boxplot() ``` <img src="visualizacion_files/figure-html/caja-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # `geom_jitter()` Puedo evaluar cuantos datos están representados ```r library(tidyverse) library(datos) ggplot(data = millas, mapping = aes(x = clase, y = autopista))+ geom_boxplot()+ geom_jitter() ``` <img src="visualizacion_files/figure-html/cajajitter-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # Giro el sistema de coordenadas <img src="graficos.png" width="300px" style="display: block; margin: auto;" /> ```r library(tidyverse) library(datos) ggplot(data = millas, mapping = aes(x = clase, y = autopista)) + geom_boxplot()+ geom_jitter()+ coord_flip() ``` <img src="visualizacion_files/figure-html/cajaj2-1.png" style="display: block; margin: auto;" /> --- class: middle, inverse # Gráfico de puntos # Gráfico de líneas --- <img src="hex.png" width="10%" align="right" /> # Gráfico de puntos Uso el argumento `color` para mapear una tercer variable ```r ggplot(data = millas) + geom_point(mapping = aes(x = motor, y = autopista, color = clase)) ``` <img src="visualizacion_files/figure-html/puntos-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # Gráfico de puntos Si quiero observar tercer variable pero esta vez continua puedo usar otro argumento, como `size` ```r ggplot(data = millas)+ geom_point(mapping = aes(x = motor, y = autopista, size = cilindros)) ``` <img src="visualizacion_files/figure-html/size-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # Gráfico de líneas ```r library(gapminder) gapminder %>% filter(country %in% c("Argentina","Brazil","Chile"))%>% ggplot() + geom_line(aes(x = year, y = pop, color = country), size = 1.5) ``` <img src="visualizacion_files/figure-html/lineas-1.png" style="display: block; margin: auto;" /> --- class: middle, inverse, center # 💡💻 # Demo #3 ¿Cómo hago un gráfico que combina líneas y puntos? Entiendo que los gráficos tienen capas --- class: middle, inverse # Heatmap --- <img src="hex.png" width="10%" align="right" /> # `geom_tile()` ```r ggplot(airquality, aes(x = Month, y = Day)) + geom_tile(aes(fill=Temp))+ scale_fill_gradient(name = 'Temperature', low = 'white', high = 'red')+ labs(title="Temperature Readings by Date") ``` <img src="visualizacion_files/figure-html/tile-1.png" style="display: block; margin: auto;" /> .footnote[http://analyticswithr.com/dataviz.html] --- <img src="hex.png" width="10%" align="right" /> # Puede ser mas complejo <img src="superheatmap.png" width="400px" style="display: block; margin: auto;" /> --- class: middle, inverse # Escalas de colores 📊 --- # Tipos de escalas Divergente, secuencial y cualitativa <img src="escalas.png" width="500px" style="display: block; margin: auto;" /> --- # Un paquete con paletas de colores ¿Cuales son paletas divergentes/secuenciales/cualitativas? Otra paleta es `viridis` ```r library(RColorBrewer) RColorBrewer::display.brewer.all() ``` <img src="visualizacion_files/figure-html/heater-1.png" style="display: block; margin: auto;" /> --- ```r library(tidyverse) library(datos) dsamp <- sample_n(diamantes, size = 1000) ggplot(dsamp, aes(quilate, precio, colour = claridad))+ geom_point()+ scale_colour_brewer(palette = "Set1") ``` <img src="visualizacion_files/figure-html/holala-1.png" style="display: block; margin: auto;" /> --- class: middle, inverse # Facetas Funciones `facet_grid` y `facet_wrap` --- <img src="hex.png" width="10%" align="right" /> # `facet_wrap()` Es más útil si tiene una sola variable con muchos niveles. `nrow` y/o `ncol` son argumentos útiles. ```r library(datos) ggplot(diamantes) + geom_bar(aes(x = color, fill = corte)) + facet_wrap(~corte) ``` <img src="visualizacion_files/figure-html/wrap-1.png" style="display: block; margin: auto;" /> --- <img src="hex.png" width="10%" align="right" /> # `facet_grid()` Es más útil cuando tiene dos variables discretas, y todas las combinaciones de las variables existen en los datos. ```r library(datos) ggplot(diamantes) + geom_bar(aes(x = color, fill = corte)) + facet_grid(claridad~corte) ``` <img src="visualizacion_files/figure-html/grip-1.png" style="display: block; margin: auto;" /> --- class: center, middle, inverse # 💡💻 # Demo #4 Probemos todas las posibilidades de gráficos con `facet_wrap()` y `facet_grid()` ¿Qué pasa si empleo una variable continua para el facetado? --- <img src="hex.png" width="10%" align="right" /> # Temas Puedes encontrar más temas en el paquete [ggthemes](https://www.ggplot2-exts.org/ggthemes.html) <img src="visualizacion_files/figure-html/themes1-1.png" style="display: block; margin: auto;" /> .footnote[https://garthtarr.github.io/meatR/ggplot_extensions.html] --- <img src="hex.png" width="10%" align="right" /> # Temas <img src="visualizacion_files/figure-html/themes2-1.png" style="display: block; margin: auto;" /> .footnote[https://garthtarr.github.io/meatR/ggplot_extensions.html] --- <img src="hex.png" width="10%" align="right" /> # Ejes ## Cambio de nombre a los ejes <img src="visualizacion_files/figure-html/ejes-1.png" style="display: block; margin: auto;" /> --- class: center, middle, inverse # Links [ggplot2 Book](https://ggplot2-book.org/) [R4DS español](https://es.r4ds.hadley.nz/) [Rcookbook](http://www.cookbook-r.com/) [Fundamentals of Data Visualization](https://serialmentor.com/dataviz/index.html) [Geocomputation with R](https://geocompr.robinlovelace.net/index.html) --- background-image: url(textura-fondo.png) background-size: cover class: center, middle, inverse # 🙋 ¿Preguntas? --- # Práctica