class: center, middle, inverse, title-slide # Herramientas Cuantitativas para el Análisis Político ## Maestría en Ciencia Política [CP44] ### ### Universidad Torcuato Di Tella ### 26/10/2021 --- layout: true <div class="my-footer"><span>Juan Pablo Ruiz Nicolini | @TuQmano | <a href="https://tuqmano.ar/">www.tuqmano.ar</a></span></div> --- class: inverse, center, middle # REPASO ## `ggplot2` # Data Viz I ## La _Gramática de los Gráficos_ --- class: inverse, middle # Garmática de los Gráficos > **Un conjunto formal de reglas para la producción de gráficos estadísticos** > **Se basa en la definición de capas** #### **_Leland Wilkinson_** * Estadística y Ciencia de Computación **+** * Experto en Viz (_SPSS, Tableau_) **+** **->** [_**Grammar of Graphics**_ (1999)](https://www.springer.com/gp/book/9780387245447) --- class: inverse ##
Referencias (I) #### Tres libros relevantes - [`ggplot2`: _**Elegant Graphics for Data Analysis**_](https://ggplot2-book.org/) (**H. Wickham**) es el material principal con definiciones de la aplicación de la _gramática de gráficos_ en `R`. - [_**Data Visualization: A Pracitcal Introduction**_](https://socviz.co/index.html#preface) (**K. Heley**) disute principios sobre visualización de datos, y consejos práctivos de su aplicación acompañado de código en `R` par reproducirlos. - En [_**Fundamentals of Data Visualization**_](https://clauswilke.com/dataviz/) (**Claus Wilke**) presentan argumentos y consejos para realizar visualizaciones profesionales que representen correctamente los datos. #### Complementarios - _Visualización de Datos (Intro)_, en "[R para Ciencia de Datos](https://es.r4ds.hadley.nz/visualizaci%C3%B3n-de-datos.html#introducci%C3%B3n-1)" (Wickham y Grolemnud). - [_ModernDive_](https://moderndive.com/2-viz.html) - *En español*: + [(a) Urdinez y Cruz](https://arcruz0.github.io/libroadp/dataviz.html); + [(b) Montané](https://martinmontane.github.io/CienciaDeDatosBook/visualizaciones-de-datos-en-r.html); y + [(c) Vázquez Brust](https://bitsandbricks.github.io/ciencia_de_datos_gente_sociable/visualizaci%C3%B3n.html). --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% # Data Viz ## La **g**ramática de los **g**ráficos en `R` #### _Dibujando por capas_ con [
`{ggplot2}`](https://ggplot2.tidyverse.org/index.html) <img src="../fig/ggplot_layers.png" width="35%" /> **
** [_Plotting Anything with `ggplot2`_](https://www.youtube.com/watch?v=h29g21z0a68) - Thomas Lin Pedersen. --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% class: middle, inverse # Data Viz ## RECETA BÁSICA ```r ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>)) ``` --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 10% background-size: 10% # Data Viz ### `millas` del [paquete
`{datos}`](https://cienciadedatos.github.io/datos/) ```r library(tidyverse) library(datos) dplyr::as_tibble(millas) ## # A tibble: 234 x 11 ## fabricante modelo cilindrada anio cilindros transmision traccion ciudad ## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> ## 1 audi a4 1.8 1999 4 auto(l5) d 18 ## 2 audi a4 1.8 1999 4 manual(m5) d 21 ## 3 audi a4 2 2008 4 manual(m6) d 20 ## 4 audi a4 2 2008 4 auto(av) d 21 ## 5 audi a4 2.8 1999 6 auto(l5) d 16 ## 6 audi a4 2.8 1999 6 manual(m5) d 18 ## 7 audi a4 3.1 2008 6 auto(av) d 18 ## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18 ## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16 ## 10 audi a4 quattro 2 2008 4 manual(m6) 4 20 ## # ... with 224 more rows, and 3 more variables: autopista <int>, ## # combustible <chr>, clase <chr> ``` --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% # Data Viz: _ggplot2_ ### Receta básica ```r ggplot(data = millas) + # DATOS geom_point(mapping = aes(x = cilindrada, y = autopista)) # ESTETICAS ``` <img src="clase7_files/figure-html/millas-1.png" width="40%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% class: inverse, center, middle # _Dibujando por capas_ ### mapeo y estéticas <img src="../fig/ggplot_layers.png" width="35%" /> --- # _Dibujando por capas_ ## Una capa estética extra con **_aes()_** ```r ggplot(data = millas) + # 'Esteticas' geom_point(mapping = aes(x = cilindrada, y = autopista, * colour = clase)) ``` <img src="clase7_files/figure-html/unnamed-chunk-5-1.png" width="50%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% # _Dibujando por capas_ ## _mapping_ VS _setting_ ```r *# Que pasa acá? ggplot(data = millas) + geom_point(mapping = aes(x = cilindrada, y = autopista, * colour = "blue")) ``` <img src="clase7_files/figure-html/unnamed-chunk-6-1.png" width="40%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_ ```r ggplot(data = millas) + geom_point(mapping = aes(x = cilindrada, y = autopista), * colour = "blue") ``` <img src="clase7_files/figure-html/unnamed-chunk-7-1.png" width="40%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_ Cada **_geometry_ tiene parámetros específicos** que pueden ser ajustados dentro de la capa _estética_. El **color** es uno de ellos. A `geom_point` podemos asignarle una forma particular en función de valores de alguna variable, por ejemplo: <img src="https://es.r4ds.hadley.nz/03-visualize_files/figure-html/unnamed-chunk-8-1.png" width="30%" /> * `shape` * `size` * `alpha` * `fill` --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% class: inverse, center, middle ## _Dibujando por capas_ : **_facets_** <img src="../fig/ggplot_layers.png" width="35%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_: **facetas** ##### _small multiples_ ```r ggplot(data = millas) + geom_point(mapping = aes(x = cilindrada, y = autopista)) + * facet_wrap(~ clase, nrow = 2) ``` <img src="clase7_files/figure-html/unnamed-chunk-10-1.png" width="45%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% class: inverse, center, middle ## _Dibujando por capas_: **_geometry_** <img src="../fig/ggplot_layers.png" width="35%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_: variedad de **geometrías** posibles <img src="clase7_files/figure-html/unnamed-chunk-12-1.png" width="35%" /><img src="clase7_files/figure-html/unnamed-chunk-12-2.png" width="35%" /> ```r # izquierda ggplot(data = millas) + * geom_point(mapping = aes(x = cilindrada, y = autopista)) # derecha ggplot(data = millas) + * geom_smooth(mapping = aes(x = cilindrada, y = autopista)) ``` --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_ > Integramos los dos `geom_` como capas de un mismo gráfico ```r ggplot(data = millas) + geom_point(mapping = aes(x = cilindrada, y = autopista)) + geom_smooth(mapping = aes(x = cilindrada, y = autopista)) ``` <img src="clase7_files/figure-html/unnamed-chunk-14-1.png" width="35%" /> **Podemos asignar parametros _globales_ para todo el gráfico (que pueden ser sobrescritos en capas siguientes)** ```r ggplot(data = millas, aes(x = cilindrada, y = autopista)) + geom_point() + geom_smooth() ``` <img src="clase7_files/figure-html/unnamed-chunk-15-1.png" width="35%" /> --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 1% background-size: 10% # _Dibujando por capas_ ## Data Viz: _ggplot2_ ```r ggplot(millas, aes(cilindrada, autopista)) + geom_point() + geom_smooth() ``` <img src="clase7_files/figure-html/unnamed-chunk-16-1.png" width="35%" /> > **Se pueden elidir los nombres de parámetros** **
** Más detalle en esta [Intro a ggplot]("https://es.r4ds.hadley.nz/visualización-de-datos.html") --- background-image: url(https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png) background-position: 95% 5% background-size: 10% class: inverse, center, middle ## _Dibujando por capas_: **_theme_** <img src="../fig/ggplot_layers.png" width="35%" /> --- # _Dibujando por capas_ ## Data Viz: _ggplot2_: **_theme()_** ```r ggplot(millas, aes(cilindrada, autopista)) + geom_point() + geom_point(data = millas %>% filter(fabricante == "audi"), color = "blue", size =3) + geom_smooth(se = FALSE) + labs(title = "Performance de los AUDI", subtitle = "Un gráfico del TuQmano", y = "Etiqueta Y", x = "Etiqueta X", caption = "FUENTE: {datos} 'R Para Ciencia de Datos'") + * ggthemes::theme_wsj() ``` <img src="clase7_files/figure-html/unnamed-chunk-18-1.png" width="35%" /> --- class: middle, center, inverse ### Data Viz (II) #### Las muchas capas de `ggplot2 +` extensiones --- class: middle background-image: url(https://user-images.githubusercontent.com/520851/34887433-ce1d130e-f7c6-11e7-83fc-d60ad4fae6bd.gif) background-position: 95% 5% background-size: 10% ### GEOM integrado .pull-left[ ```r library(tidyverse) p <- geoAr::get_geo(geo = "TUCUMAN") %>% ggplot2::ggplot() + # SETTING color * ggplot2::geom_sf(color = "blue") p ``` <img src="clase7_files/figure-html/unnamed-chunk-19-1.png" width="504" /> ] .pull-right[ <img src="https://github.com/rstudio/hex-stickers/raw/master/PNG/ggplot2.png" width="20%" /> ] --- background-image: url(https://user-images.githubusercontent.com/520851/34887433-ce1d130e-f7c6-11e7-83fc-d60ad4fae6bd.gif) background-position: 95% 5% background-size: 10% ## `aes()` ### **Estéticas como capas** ```r p + * aes(fill = p$data$coddepto_censo) ``` <img src="clase7_files/figure-html/unnamed-chunk-21-1.png" width="504" /> * Extraemos valores de variable desde el objeto `ggplot2` --- class: inverse, center, middle # Galería de extensiones a `ggplot2` <https://exts.ggplot2.tidyverse.org/gallery/> --- background-image: url(https://patchwork.data-imaginist.com/reference/figures/logo.png) background-position: 95% 5% background-size: 10% # Composición de gráficos [
`{patchwork}`](https://patchwork.data-imaginist.com/) ```r library(ggplot2) *library(patchwork) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) *p1 + p2 ``` <img src="clase7_files/figure-html/unnamed-chunk-22-1.png" width="504" /> --- background-image: url(https://patchwork.data-imaginist.com/reference/figures/logo.png) background-position: 95% 5% background-size: 10% # Composición de gráficos .pull-left[ [
`{patchwork}`](https://patchwork.data-imaginist.com/) ```r p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec)) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) *(p1 | p2 | p3) / * p4 ``` <img src="clase7_files/figure-html/unnamed-chunk-23-1.png" width="504" /> ] -- .pull-right[ ### Alternativa <img src="https://wilkelab.org/cowplot/reference/figures/logo.png" width="20%" /> [
`{cowplot}`](https://wilkelab.org/cowplot/index.html) ] --- background-image: url(https://wilkelab.org/cowplot/reference/figures/logo.png) background-position: 95% 3% background-size: 10% # Composición de gráficos ```r library(cowplot) logo_file <- "https://github.com/electorArg/polAr/blob/master/hex/hex-polAr.png?raw=true" ggdraw(cow_plot) + draw_label(label = "HECHO CON", color = "blue", size = 40, angle = 45 , alpha = .5) + draw_image(logo_file, x = 1, y = 1.1, hjust = 1, vjust = 1, width = 0.15) ``` <img src="clase7_files/figure-html/unnamed-chunk-26-1.png" width="504" /> --- background-image: url(https://dreamrs.github.io/esquisse/reference/figures/esquisse.gif) background-size: 70% # [
`{esquisse}`](https://dreamrs.github.io/esquisse/) --- class: inverse ##
Referencias ### Themes * `{ggthemes}` <https://jrnold.github.io/ggthemes/index.html> * `{hrbthemes}` <https://cinc.rud.is/web/packages/hrbrthemes/> -- ### Fonts * `{extrafont}` <https://github.com/wch/extrafont> * `{ggtext}` <https://wilkelab.org/ggtext/> -- ### `+` * `{plotly}` <https://plotly-r.com/> * **The `R` Graph Gallery** <https://www.r-graph-gallery.com/>