class: center, middle, inverse, title-slide # Visualizaciones Efectivas con ggplot2 ##
Más allá de las opciones por defecto
### Stephanie Orellana ### Riva Quiroga ### 2022-06-20 --- class: center, middle # Visualizaciones Efectivas con ggplot2 ## `Más allá de las opciones por defecto` ### empezamos en
10
:
00
--- class: inverse background-image: url("img/cohete.png") background-size: 400px 400px background-position: center right 50px # Temario -- **Repaso conceptos básicos ggplot** -- **Cómo mejorar nuestro gráfico de forma sencilla** - Ejemplo práctico 1 -- **Cómo ayudar a nuestra audiencia a entender lo que</br>queremos comunicar** - Ejemplo práctico 2 -- **Extensiones de ggplot** --- class: inverse background-image: url("img/cohete.png") background-size: 400px 400px background-position: center right 50px # Temario -- **El tema y sus elementos** - Ejemplo práctico 3 -- **Uso creativo** - Ejemplo práctico 4 -- **Cómo practicar** -- **Cierre** --- class: middle, inverse # Antes de empezar, hablemos acerca de cómo nos vamos a organizar --- class: middle # La carpeta con el proyecto ### versión para descargar: https://bit.ly/ggplot22-proyecto ### copia en RStudio Cloud: https://bit.ly/ggplot22-cloud --- class: middle # Esta presentación ### https://bit.ly/ggplot22-presentacion --- class: middle, inverse # Conceptos básicos ✏️ **Mejorando nuestro modelo mental** --- # Lógica de capas <img src="img/ggplot-es.png" width="90%" style="display: block; margin: auto;" /> --- # aestethics **`aes()`** - La función `aes()` puede utilizarse en tres contextos: ```r ## Por separado ## # las estéticas dentro de aes() serán comunes a # todos los geom que utilice. ggplot(datos)+ `aes()` + geom_col() ## Dentro de la función ggplot() ## # las estéticas dentro de aes() serán comunes a # todos los geom que utilice. ggplot(datos, `aes()`)+ geom_col() ## Dentro de geom ## # las estéticas dentro de aes() serán válidas # solo para el geom que la contiene. ggplot(datos)+ geom_col(`aes()`) ``` --- # aestethics **`aes()`** - Ponemos dentro de esta función estéticas que queremos mostrar que **varían según los valores que toman nuestros datos** - Las estéticas que podemos usar dependen del tipo de gráfico (`geom`) que estamos utilizando, pero las más utilizadas son: - x - y - color - fill - alpha - shape - size --- # aestethics **`aes()`** - Fuera de `aes()` podemos fijar aspectos estéticos que son comunes dentro de `geom` (no varían según los valores de los datos). Por ejemplo, si quiero que todas las columnas tengan una transparencia de 70%: ```r ggplot(datos, aes(x = ..., y = ..., fill = ...))+ geom_col(`alpha = 0.7`) ``` - Podemos combinar estéticas dentro y fuera de `aes()`, y dentro y fuera de `geom_*()` para hacer el gráfico que tenemos en mente. - Todas las estéticas que utilizamos pueden escalarse mediante las funciones `scale_*_*()`. --- # scales - Es muy importante entender si los valores que asignamos a una estética son de tipo continuo o discreto. Si asignamos mal la escala, recibiremos el famoso error: ```r library(ggplot2) ggplot(iris, aes(x= Sepal.Length, y = Petal.Length, color = Species))+ geom_point()+ scale_color_`continuous`() ``` .code-text-red[ ``` ## Error: Discrete value supplied to continuous scale ``` <img src="index_files/figure-html/unnamed-chunk-5-1.png" width="0%" /> ] --- # scales - También es un error común utilizar una función que no corresponde con la estética que queremos cambiar: .pull-left[ ```r library(ggplot2) ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, `color` = Species)) + geom_point() + scale_`fill`_discrete(type = c("pink", "gold3", "cyan")) ``` En este caso **no** recibimos un error, pero tampoco visualizamos el cambio en la escala. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-7-1.png" width="80%" style="display: block; margin: auto;" /> ] --- class: inverse, middle # Cómo mejorar nuestro gráfico de forma sencilla 💻 **ejemplo práctico 1: : `codigo/01_mejoras-sencillas.R`** --- class: inverse --- class: inverse # Resumen - Revisar títulos y etiquetas - Cuáles son redundantes - Cuáles son necesarias - Revisar etiquetas sobrepuestas - Invertir ejes - Escalar etiquetas con scale_*_discrete() y guide_axis() - Dar formato a las etiquetas de ejes cuando sea necesario. Por ejemplo en caso de monedas o porcentaje. --- class: inverse # Resumen - Utilizar colores que tengan relación con los datos y sean contrastantes. - Revisar leyenda - Guardar, buen tamaño, buena resolución --- class: middle # Volvemos en
07
:
00
--- class: inverse, middle # Cómo ayudar a nuestra audiencia a entender lo que queremos comunicar 💻 **ejemplo práctico 2: `codigo/02_atencion-audiencia.R`** --- class: inverse --- class: inverse # Resumen -- </br> ### - Ayuda a quien lee a enfocarse en los datos de interés -- ### - Incluye anotaciones que ayuden a interpretar los datos, sobre todo en los casos en que no hay un texto que acompaña al gráfico -- ### - Procura que las etiquetas de los ejes y el formato de los valores sean entendibles --- class: inverse, middle # Extensiones de ggplot 🌎 **Un universo de paquetes** --- # Para publicaciones .pull-left[ ### [{ggstatsplot}](https://indrajeetpatil.github.io/ggstatsplot/) <img src="https://rpkgs.datanovia.com/ggpubr/tools/README-ggpubr-box-plot-dot-plots-strip-charts-2.png" width="80%" /> ] .pull-right[ ### [{ggpubr}](https://rpkgs.datanovia.com/ggpubr/) ![](https://indrajeetpatil.github.io/ggstatsplot/reference/figures/README-ggbetweenstats1-1.png)<!-- --> ] --- # Unir gráficos .pull-left[ ### [{patchwork}](https://patchwork.data-imaginist.com/) ![](https://patchwork.data-imaginist.com/articles/guides/assembly_files/figure-html/unnamed-chunk-15-1.png)<!-- --> ] .pull-right[ ### [{cowplot}](https://wilkelab.org/cowplot/index.html) ![](https://wilkelab.org/cowplot/articles/drawing_with_on_plots_files/figure-html/unnamed-chunk-11-1.png)<!-- --> ] --- # Agregar movimiento .pull-left[ ### [{gganimate}](https://gganimate.com/) ![](https://gganimate.com/reference/figures/README-unnamed-chunk-4-1.gif)<!-- --> ] --- # Más geoms .pull-left[ ### [{ggforce}](https://ggforce.data-imaginist.com/) ![](https://ggforce.data-imaginist.com/reference/geom_delvor-3.png)<!-- --> ] .pull-right[ ### [{ggraph}](https://ggraph.data-imaginist.com/) ![](https://ggraph.data-imaginist.com/articles/Layouts_files/figure-html/unnamed-chunk-18-1.png)<!-- --> ] --- # Más geoms .pull-left[ ### [{geomtextpath}](https://lepennec.github.io/ggwordcloud/) ![](https://allancameron.github.io/geomtextpath/reference/figures/README-density_demo-1.png)<!-- --> ] .pull-right[ ### [{ggwordcloud}](https://lepennec.github.io/ggwordcloud/) ![](https://lepennec.github.io/ggwordcloud/articles/ggwordcloud_files/figure-html/unnamed-chunk-22-1.png)<!-- --> ] --- # Otros usos .pull-left[ ### [{calendR}](https://r-coder.com/calendar-plot-r/) <img src="https://r-coder.com/wp-content/uploads/2020/09/background-image-calendar-r.png" width="60%" style="display: block; margin: auto;" /> ] .pull-right[ ### [{ggkeyboard}](https://github.com/sharlagelfand/ggkeyboard) ![](https://raw.githubusercontent.com/sharlagelfand/ggkeyboard/main/man/figures/README-pastel-1.png)<!-- --> ] --- class: inverse, middle # Tema 🚀 **Cómo hacer el gráfico que tengo en mente** --- class: middle ## Con la función `theme()` podemos modificar los componentes de un gráfico que no son datos (por ejemplo, el fondo, la fuente tipográfica, las leyendas, etc.) --- class: middle ## La forma más simple de ir más allá de las opciones por defecto, es usar temas pre-hechos 📦 --- # Paquetes para temas .pull-left[ ### [{ggthemes}](https://yutannihilation.github.io/allYourFigureAreBelongToUs/ggthemes/) <img src="https://yutannihilation.github.io/allYourFigureAreBelongToUs/figure/source/1991-05-31-theme_wsj/theme_wsj-1.png" width="70%" style="display: block; margin: auto;" /> ] .pull-right[ ### [{hrbrthemes}](https://cinc.rud.is/web/packages/hrbrthemes/) ![](https://cinc.rud.is/web/packages/hrbrthemes/reference/figures/README-sc-1.png)<!-- --> ] --- # Paquetes para temas .pull-left[ ### [{ggdark}](https://github.com/nsgrantham/ggdark) ![](https://github.com/nsgrantham/ggdark/raw/master/man/figures/add-element-1.png)<!-- --> ] .pull-right[ ### [{tvthemes}](https://ryo-n7.github.io/2019-05-16-introducing-tvthemes-package/) ![](https://ryo-n7.github.io/assets/2019-05-16-introducing-tvthemes-package_files/unnamed-chunk-8-1.png)<!-- --> ] --- class: inverse, middle # Cómo modificar el tema 💻 **ejemplo práctico 3: `codigo/03_modificar-el-tema.R`** --- --- class: middle # Volvemos en
07
:
00
--- --- class: inverse, middle # Uso creativo ⭐ **Hay mucho más por aprender: `codigo/04_uso-creativo.R`** --- # Uso creativo: arte generativo .pull-left[ ### [Ijeamaka Anyene](https://twitter.com/ijeamaka_a) ### [Meghan Harris](https://www.thetidytrekker.com/rtistry-gallery) ### [Danielle Navarro](https://art.djnavarro.net/) ### [Antonio Sánchez Chinchón](https://twitter.com/aschinchon) ### [Thomas Lin Pedersen](https://www.data-imaginist.com/art) ] .pull-right[ <img src="https://djnavarro.net/series-unboxing/2000/unboxing_387.png" width="90%" style="display: block; margin: auto;" /> https://art.djnavarro.net/gallery/unboxing/ ] --- class: inverse, middle # Cómo practicar 💪 **Desafíos de visualización** --- # Desafíos de visualización .pull-left[ ### [#genuary](https://genuary.art/) ### [#30daychartchallenge](https://30daychartchallenge.org/) ### [#30daymapchallenge](https://30daymapchallenge.com/) ### [#DuBois Challenge](https://nightingaledvs.com/the-dubois-challenge/) ### [#30diasdegraficos](https://github.com/cienciadedatos/datos-de-miercoles/blob/master/30-dias-de-graficos-2020.md) ] .pull-right[ ![](https://pbs.twimg.com/media/FPKZks-WUAQXHWB?format=jpg&name=4096x4096)<!-- -->![](https://ossia.io/assets/blog/genuary2022/genuary.png)<!-- --> ] --- class: inverse, middle background-image: url(https://user2021.r-project.org/img/artwork/user-logo-color.png) background-size: 200px 200px background-position: right bottom # ¡Muchas gracias! 👏 Material disponible en el [repositorio del taller](https://github.com/sporella/user2022_mas_sobre_ggplot)