class: center, middle, inverse, title-slide <style type="text/css"> .remark-slide table{ border: none } .remark-slide-table { } tr:first-child { border-top: none; } tr:last-child { border-bottom: none; } </style> <style type="text/css"> /* THIS IS A CSS CHUNK - THIS IS A COMMENT */ /* Size of font in code echo. E.g. 10px or 50% */ .remark-code { font-size: 70%; } /* Size of font in text */ .medium-text { font-size: 75%; } /* Size of font in tables */ .small-table table { font-size: 6px; } .medium-table table { font-size: 8px; } .medium-large-table table { font-size: 10px; } </style> # Introducción a R para la epidemiología aplicada ### Introducción a la visualización de datos con {ggplot2} ## [contact@appliedepi.org](mailto:contact@appliedepi.org) --- # Objetivos y agenda - Comprender la "Gramática de los gráficos" con el paquete {ggplot2} . - Construir gráficos boxplot, de dispersión, de barras e histogramas sencillos - Ajuste de las escalas, temas y etiquetas de los gráficos <div class="tabwid"><style>.cl-a7909938{}.cl-a77e7d66{font-family:'Arial';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-a78131a0{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-a78131aa{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-a78b703e{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 1.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7048{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 1.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7052{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 1.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b705c{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7066{width:0.778in;background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7067{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7070{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7071{width:0.778in;background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b707a{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7084{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7085{width:0.778in;background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b708e{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7098{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b7099{width:0.778in;background-color:transparent;vertical-align: top;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b70a2{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b70ac{width:1.007in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b70ad{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a78b70b6{width:3.239in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table data-quarto-disable-processing='true' class='cl-a7909938'><thead><tr style="overflow-wrap:break-word;"><th class="cl-a78b703e"><p class="cl-a78131a0"><span class="cl-a77e7d66">Tiempo</span></p></th><th class="cl-a78b7048"><p class="cl-a78131a0"><span class="cl-a77e7d66">Sesion</span></p></th><th class="cl-a78b7052"><p class="cl-a78131a0"><span class="cl-a77e7d66">Tema</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-a78b705c"><p class="cl-a78131a0"><span class="cl-a77e7d66">20 min</span></p></td><td rowspan="3"class="cl-a78b7066"><p class="cl-a78131aa"><span class="cl-a77e7d66">Parte 1</span></p></td><td class="cl-a78b7067"><p class="cl-a78131a0"><span class="cl-a77e7d66">Diapositivas: ggplot2 'Gramtica de Graficos'</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a78b7070"><p class="cl-a78131a0"><span class="cl-a77e7d66">10 min</span></p></td><td class="cl-a78b707a"><p class="cl-a78131a0"><span class="cl-a77e7d66">Demostración</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a78b7084"><p class="cl-a78131a0"><span class="cl-a77e7d66">1hr 30 min</span></p></td><td class="cl-a78b708e"><p class="cl-a78131a0"><span class="cl-a77e7d66">Ejercicio</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a78b7084"><p class="cl-a78131a0"><span class="cl-a77e7d66">20 min</span></p></td><td class="cl-a78b7085"><p class="cl-a78131aa"><span class="cl-a77e7d66">Parte 2</span></p></td><td class="cl-a78b708e"><p class="cl-a78131a0"><span class="cl-a77e7d66">Diapositivas: Escalas, temas y etiquetas</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a78b7084"><p class="cl-a78131a0"><span class="cl-a77e7d66">1 hora</span></p></td><td class="cl-a78b7085"><p class="cl-a78131aa"><span class="cl-a77e7d66"></span></p></td><td class="cl-a78b708e"><p class="cl-a78131a0"><span class="cl-a77e7d66">Ejercicio</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a78b7098"><p class="cl-a78131a0"><span class="cl-a77e7d66">10 min</span></p></td><td class="cl-a78b7099"><p class="cl-a78131aa"><span class="cl-a77e7d66">-</span></p></td><td class="cl-a78b70a2"><p class="cl-a78131a0"><span class="cl-a77e7d66">Revisión del día</span></p></td></tr></tbody><tfoot><tr style="overflow-wrap:break-word;"><td colspan="3"class="cl-a78b70ac"><p class="cl-a78131a0"><span class="cl-a77e7d66">Toma los descansos necesarios durante los ejercicios</span></p></td></tr></tfoot></table></div> --- class: inverse, center, middle ## Visualización de datos con {ggplot2} <img src="../../images/ggplot_intro/ggplot2_hex.png" width="50%" /> --- # Opciones de visualización en R Hoy nos centramos en el paquete {ggplot2} porque: - Es bueno para la exploración rápida de datos multidimensionales - Produce resultados finales de muy **alta calidad** - Tiene una gramática bien estructurada => **gran coherencia** - Se acompaña de muchos paquetes que amplían la funcionalidad Consulta el [Galería de gráficos R](https://www.r-graph-gallery.com/ggplot2-package.html) para inspirarte. .footnote[Otras opciones de trazado son [**base** R](https://towardsdatascience.com/base-plotting-in-r-eb365da06b22), [**red**](https://www.statmethods.net/advgraphs/trellis.html) y [**plotly**](https://plotly.com/r/). ] --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/clustering.png" width="100%" /> .footnote[Fuentes de imágenes [aquí](http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html) y [aquí](https://jcheshire.com/r-spatial-datos-hints/great-maps-ggplot2/)] --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/dumbbell_chart.png" width="50%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/map.png" width="50%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/bike_london.png" width="100%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/swiss_map.png" width="90%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/phylo_tree.png" width="60%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/uk_geography.jpg" width="100%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/art_ggplot.png" width="50%" /> --- # ¿Se hizo con ggplot? <img src="../../images/ggplot_intro/van_gogh.jpg" width="80%" /> --- # ¿gg-qué? -- - El *paquete* {ggplot2} es la herramienta de visualización de datos más popular de R -- - Su *función* `ggplot()` es el núcleo del paquete -- - Todo este enfoque se conoce coloquialmente como "ggplotting". -- - Las figuras producidas con ggplot a veces se llaman cariñosamente "ggplots". -- Existen muchos paquetes que amplian las funcionalidades de {ggplot2} como son {gganimate}, {ggthemr}, {ggdendro}, {gghighlight}, {ggforce}... .footnote[ *Pregunta extra:* ¿Qué representa la "gg" en estos nombres? ] ??? - "gg" representa la "gramática de los gráficos" utilizada para construir las figuras --- # Gramática de los gráficos Construye un gráfico añadiendo capas a través de funciones que especifican datos y elementos de diseño -- El orden suele ser el siguiente: 1) **"Abre" el gráfico** con la función `ggplot()` y **especifica la base de datos** -- 2) **"Mapear" columnas de datos** sobre características "estéticas" del gráfico (ejes, color, tamaño, forma) -- 3) **Mostrar los datos** como capas **"geom"** -- 4) **Modificar "escalas"** como la escala de color o los intervalos del eje 'y' -- 5) **Ajusta los elementos "temáticos" que no sean datos** como las etiquetas de los ejes, el título, la leyenda y los tipos de letra Estas capas se "añaden" secuencialmente con el símbolo **`+`** . ??? Recuerda que aunque los comandos sean largos, es infinitamente más fácil editar y reciclar que en Excel --- # Abrir el gráfico .pull-left[ ```r ggplot() ``` `ggplot()` crea un lienzo (canvas en inglés) en blanco. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-17-1.png" width="504" /> ] ??? Esto es sólo un lienzo en blanco, no hemos definido qué debe haber en los ejes x e y. Si se necesitan varias bases de datos, se pueden añadir en sus propios geoms. La canalización es útil para hacer cambios puntuales en un conjunto de datos antes de graficarlo. --- # Añade los datos .pull-left[ ```r ggplot(data = vig) ``` Asigna la base de datos fuente. Alternativamente, utiliza la función `%>%` para "canalizar" una base de datos o dataframe *en* la función `ggplot()` ```r vig %>% ggplot() ``` ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-20-1.png" width="504" /> ] ??? Esto es sólo un lienzo en blanco, no hemos definido qué debe haber en los ejes x e y. Si se necesitan varias bases de datos, se pueden añadir en sus propios geoms. La canalización es útil para hacer cambios puntuales en un conjunto de datos antes de trazarlo. --- # Añade los datos .pull-left[ ```r ggplot( data = vig) ``` - Las nuevas líneas y las sangrías no afectarán a la ejecución del código. - Pueden hacer que los comandos más largos sean más fáciles de leer... ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-22-1.png" width="504" /> ] ??? Esto es sólo un lienzo en blanco, no hemos definido qué debe haber en los ejes x e y. Si se necesitan varios marcos de datos, se pueden añadir en sus propios geoms. La canalización es útil para hacer cambios puntuales en un conjunto de datos antes de trazarlo. --- # Asignaciones con `aes()` .pull-left[ ```r ggplot( data = vig, * mapping = aes()) ``` La "estética" del gráfico son características como la posición, el color, la forma... `mapping = aes()` asigna la "estética" proveniente de las columnas de los datos. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-24-1.png" width="504" /> ] ??? los comandos ggplot tienden a ponerse muy verticales (largos) --- # Asignaciones con `aes()` .pull-left[ ```r ggplot( data = vig, mapping = aes( * x = edad_anios )) ``` Las asignaciones estéticas se colocan dentro de `aes()`. Dos mapeos básicos provenientes de las columnas son: **`x = `** ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-26-1.png" width="504" /> ] ??? los comandos ggplot tienden a ponerse muy verticales (largos) --- # Asignaciones con `aes()` .pull-left[ ```r ggplot( data = vig, mapping = aes( * x = edad_anios, * y = alt_cm)) ``` Las asignaciones estéticas se colocan dentro de `aes()`. Dos mapeos básicos provenientes de las columnas son: **`x = `** (horizontal) **`y = `** (vertical) ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-28-1.png" width="504" /> ] ??? los comandos ggplot tienden a ponerse muy verticales (largos) --- # Añadir geometría .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm)) + *geom_point() ``` Los datos se visualizan mediante comandos "geom", como `geom_point()`. Estos comandos se "añaden" o conectan con un simbolo de **`+`** al comando `ggplot()`. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-30-1.png" width="504" /> ] --- # Geometrías .pull-left[ Algunos "geoms" típicos son | Tipo de gráfico | Geom | | ------------------ | -------------------------------------------------------------------- | | Histogramas | `geom_histogram()` | | Puntos | `geom_point()` | .footnote[Lista completa [aquí](https://ggplot2.tidyverse.org/reference/) ] ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-31-1.png" width="504" /> ] --- # Geometrías .pull-left[ Algunos "geoms" típicos son | Tipo de gráfico | Geom | | ------------------ | -------------------------------------------------------------------- | | Líneas | `geom_line()` | | Gráficos de barras | `geom_bar()` o</br> `geom_col()` | .footnote\[La elección entre `geom_bar()` y `geom_col()` depende de la estructura de tus datos. Lista completa de geoms [aquí](https://ggplot2.tidyverse.org/reference/)] ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-32-1.png" width="504" /> ] --- # Geometrías .pull-left[ Algunos "geoms" típicos son | Tipo de gráfico | Geom | | ------------------ | -------------------------------------------------------------------- | | Gráficos de caja | `geom_boxplot()` | | Gráficos de violín | `geom_violin()` | .footnote[Lista completa [aquí](https://ggplot2.tidyverse.org/reference/)] ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-33-1.png" width="504" /> ] --- # Añadir geoms .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm)) + *geom_point() ``` Con los ejes ahora mapeados, con `geom_point()` muestra los datos como puntos. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-35-1.png" width="504" /> ] --- # Añadir geoms .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm)) + geom_point() + *geom_smooth() ``` Podemos añadir geoms adicionales al gráfico con el símbolo `+`. *Los *geoms* o capas aparecen en el orden en que están*: la línea suavizada aparece *sobre* los puntos. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-37-1.png" width="504" /> ] .footnote[`geom_smooth()` proporciona medias condicionales suavizadas, lo que ayuda a mostrar tendencias en presencia de "sobretrazado" (véase [documentación](https://ggplot2.tidyverse.org/reference/geom_smooth.html))] ??? - Explica por qué podrías utilizar uno u otro --- ## Nota rápida sobre las sangrías Las sangrías, los espacios y las nuevas líneas no afectan a la ejecución del código, y pueden variarse para mejorar la legibilidad. ```r ggplot(data = vig, mapping = aes(x = edad_anios, y = alt_cm)) + geom_point() ``` -- es lo mismo que: ```r ggplot(data = vig, mapping = aes(x = edad_anios, y = alt_cm)) + geom_point() ``` -- es lo mismo que: ```r ggplot( data = vig, # caso de uso lista de líneas mapping = aes( # hacer mapeos estéticos para todos los geoms x = edad_anios, # asignar el eje x a la columna de edad y = alt_cm)) + # asignar el eje y a la altura geom_point() # mostrar los datos en forma de puntos ``` .nota[¿Qué prefieres?] ??? - ¿Cuál de los dos es más fácil de leer para ti? - Explica por qué utilizarías uno u otro el estilo largo puede permitir comentarios/anotaciones informativas - el estilo corto es muy denso (más difícil de leer para algunos). Guiones más cortos, pero ¿y qué? El número de líneas de tu código no es una métrica informativa. - líneas muy largas => es necesario desplazarse horizontalmente para las personas con monitores más pequeños (no es agradable) - el estilo alargado facilita ver qué argumento pertenece a cada función - los espacios alrededor de "=" o "+" => facilitan el análisis a mucha gente - ¿Otros? --- class: large-table # Otras estéticas Aparte de los ejes, otras "estéticas" comunes son: | Argumento | Controla | | ------------------ | -------------------------------------------------------------------- | | `shape` | Visualización del punto como punto, estrella, triángulo, cuadrado... | | `fill` | En *interior* color (por ejemplo, de barra o boxplot) | | `color` | En *exterior* o barra, boxplot - O color del punto | | `size` | Grosor de línea, tamaño de punto... | | `alpha` | Transparencia: de 0 (invisible) a 1 (opaco) | | `width` | Anchura de las barras del "diagrama de barras | | `linetype` | Sólidas, discontinuas, punteadas, etc. | | `binwidth` | Anchura de los intervalos del histograma | ??? Ten en cuenta que "estética" en ggplot tiene un significado específico que podrías asociar con la palabra "aesthetics" en inglés común. En ggplot esos detalles se llaman "temas" y se ajustan dentro de un comando theme() Cada geom acepta determinadas estéticas, como `binwidth=` para `geom_histogram()` <!-- --- --> <!-- clase: medio-texto --> <!-- # Tareas de estética --> <!-- .pull-izquierda[ --> <!-- La estética puede asignarse a: --> <!-- **Valores estáticos**: --> <!-- - Asignados **fuera de `aes()`** --> <!-- - Misma visualización para todos los datos --> <!-- ```{r, echo=T, eval=F} --> <!-- ggplot( --> <!-- data = sobrevivir, --> <!-- mapeo = aes( --> <!-- x = edad_años, --> <!-- y = alt_cm))+ --> <!-- geom_point(color = "púrpura") # estático #<< --> <!-- ``` --> <!-- ] --> <!-- .pull-right[ --> <!-- Algunos ejemplos: --> <!-- ```{r,eval = params$lang == "en", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = 'Usar color = "púrpura"') --> <!-- color_hospital <- ggplot() + tema_vacío() --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "fr", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Color utilisante = 'púrpura' (malva)") --> <!-- color_hospital <- ggplot() + tema_vacío() --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "ru", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Использование цвета = 'morado'") --> <!-- color_hospital <- ggplot() + theme_void() --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r,eval = params$lang == "es", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizar el color = 'morado' (púrpura)") --> <!-- color_hospital <- ggplot() + tema_vacío() --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ] --> <!-- --- --> <!-- clase: medio-texto --> <!-- # Tareas de estética --> <!-- .pull-izquierda[ --> <!-- La estética puede asignarse a: --> <!-- **Valores estáticos**: --> <!-- - Asignados **fuera de `aes()`** --> <!-- - Misma visualización para todos los datos --> <!-- ```{r, echo=T, eval=F} --> <!-- ggplot( --> <!-- data = superviviente, --> <!-- mapeo = aes( --> <!-- x = edad_años, --> <!-- y = alt_cm))+ --> <!-- geom_point(color = "púrpura") # estático #<< --> <!-- ``` --> <!-- **Una columna de datos**: --> <!-- - Asignada **dentro de `aes()`** --> <!-- - Muestra los datos como "grupos" --> <!-- ```{r, echo=T, eval=F} --> <!-- ggplot( --> <!-- data = sobrevivir, --> <!-- mapeo = aes( --> <!-- x = edad_años, --> <!-- y = alt_cm, --> <!-- color = hospital))+ # dinámico #<< --> <!-- geom_point() --> <!-- ``` --> <!-- ] --> <!-- .pull-right[ --> <!-- Algunos ejemplos: --> <!-- ```{r, eval = params$lang == "en", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Usando color = 'morado'") --> <!-- color_hospital <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(aes(color = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Usando aes(color = hospital)") --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "fr", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Color utilisante = 'púrpura' (malva)") --> <!-- color_hospital <- ggplot(data = supervivientes, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(aes(color = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizando aes(color = hospital)") --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "ru", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Использование цвета = 'púrpura' (сиреневый)") --> <!-- color_hospital <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(aes(color = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Использование aes(color = hospital), больница") --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "es", message=F, warning=F} --> <!-- color_púrpura <- ggplot(data = vig, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(color = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizar el color = 'morado' (púrpura)") --> <!-- color_hospital <- ggplot(data = sobrevivir, aes(x = edad_años, y = alt_cm))+ --> <!-- geom_point(aes(color = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizar aes(color = hospital)") --> <!-- cowplot::trama_rejilla(color_púrpura, color_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ] --> <!-- --- --> <!-- clase: medio-texto --> <!-- # Tareas de estética --> <!-- .pull-izquierda[ --> <!-- La estética puede asignarse a: --> <!-- **Valores estáticos**: --> <!-- Misma visualización para todos los datos --> <!-- ```{r, echo=T, eval=F} --> <!-- ggplot( --> <!-- data = sobrevivir, --> <!-- mapeo = aes(x = inicio_fecha)) + --> <!-- geom_histograma(relleno = "púrpura") # estático #<< --> <!-- ``` --> <!-- **Una columna de datos (dinámica)**: --> <!-- Muestra los datos como "grupos" --> <!-- ```{r, echo=T, eval=F} --> <!-- ggplot( --> <!-- data = sobrevivir, --> <!-- mapeo = aes( --> <!-- x = fecha_sintomas, --> <!-- color = distrito)) + # dinámico #<< --> <!-- geom_histograma() --> <!-- ``` --> <!-- ] --> <!-- .pull-right[ --> <!-- Más ejemplos: --> <!-- ```{r, eval = params$lang == "en", message=F, warning=F} --> <!-- fill_purple <- ggplot(data = vig, aes(x = fecha_sintomas))+ --> <!-- geom_histograma(relleno = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Usando relleno = 'púrpura'") --> <!-- relleno_hospital <- ggplot(data = superviviente, aes(x = fecha_inicio))+ --> <!-- geom_histograma(aes(relleno = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Usando aes(relleno = hospital)") --> <!-- cowplot::trama_rejilla( --> <!-- relleno_púrpura, relleno_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r,eval = params$lang == "fr", message=F, warning=F} --> <!-- fill_purple <- ggplot(data = vig, aes(x = fecha_sintomas))+ --> <!-- geom_histograma(relleno = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilisant fill = 'purple' (mauve)") --> <!-- relleno_hospital <- ggplot(data = superviviente, aes(x = fecha_inicio))+ --> <!-- geom_histograma(aes(relleno = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizando aes(fill = hospital)") --> <!-- cowplot::trama_rejilla( --> <!-- llenar_púrpura, llenar_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "ru", message=F, warning=F} --> <!-- fill_purple <- ggplot(data = vig, aes(x = fecha_sintomas))+ --> <!-- geom_histograma(relleno = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Использование fill = 'purple' (сиреневый)") --> <!-- fill_hospital <- ggplot(data = vig, aes(x = fecha_sintomas))+ --> <!-- geom_histograma(aes(relleno = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Использование aes(fill= hospital), больница") --> <!-- cowplot::trama_rejilla( --> <!-- relleno_púrpura, relleno_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ```{r, eval = params$lang == "es", message=F, warning=F} --> <!-- fill_purple <- ggplot(data = vig, aes(x = fecha_sintomas))+ --> <!-- geom_histograma(relleno = "púrpura")+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizar relleno = 'púrpura' (púrpura)") --> <!-- relleno_hospital <- ggplot(data = superviviente, aes(x = fecha_inicio))+ --> <!-- geom_histograma(aes(relleno = hospital))+ --> <!-- tema_minimo(tamaño_base = 16)+ --> <!-- labs(title = "Utilizar aes(fill = hospital)") --> <!-- cowplot::trama_rejilla( --> <!-- relleno_púrpura, relleno_hospital, --> <!-- nrow = 2, rel_widths = c(2,2)) --> <!-- ``` --> <!-- ] --> --- # Asignación estética fija .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm)) + *geom_point(color = "seagreen") ``` las asignaciones estéticas **fijas** pueden ser a un **valor numérico o de carácter**. El cambio se aplica a **todos los** puntos de datos. Escrito **fuera de `aes()`**. Otros ejemplos fijos que puedes utilizar: `size = 3` `alpha = 0.5` `fill = "purple"` ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-45-1.png" width="504" /> ] --- # Asignación estética dinámica .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm, * color = hospital)) + geom_point() ``` las asignaciones estética **Dinámicas** se asignan a un **nombre de columna**. Esto crea **grupos** en el gráfico y genera una leyenda. Ésta se escribe **dentro de `aes()`**. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-47-1.png" width="504" /> ] ??? --- # Estática y dinámica .pull-left[ ```r ggplot( data = vig, mapping = aes( x = edad_anios, y = alt_cm, * color = hospital)) + geom_point( * size = 7, * alpha = 0.6) ``` Arriba, `size = 7` y `alpha = 0.5` se asignan estáticamente, fuera de `aes()`. `color=` se asigna a la columna `hospital` dentro de `aes()`. ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-49-1.png" width="504" /> ] .footnote[Leer más sobre la estética de ggplot [aquí](https://ggplot2.tidyverse.org/articles/ggplot2-specs.html) ] ??? Como sólo hay un geom, todas las estéticas pueden escribirse en `ggplot()` o en `geom_point()` --- # Facetas (mini gráficos) .pull-left[ ```r ggplot( data = vig, mapping = aes(x = fecha_sintomas)) + geom_histogram() + *facet_wrap(~hospital) ``` Los grupos también pueden mostrarse de esta forma. Las facetas son **"mini gráficos"** `facet_wrap()` produce un gráfico por cada valor único de la columna. "~" antes del nombre de la columna es como la palabra "por" (... "por hospital") ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-51-1.png" width="504" /> ] ??? También llamados "múltiplos pequeños" --- # Facetas (mini gráficos) .pull-left[ ```r ggplot( data = vig, mapping = aes(x = fecha_sintomas)) + geom_histogram() + *facet_wrap(~hospital, scales = "free_y") ``` Ejes autoescalados "libres" con el parámetro `scales=` - "free_y" - "free_x" - "free" (tanto x como y) ] .footnote[ ¡Alerta a tu público si utilizas ejes libres! Además, prueba `ncol=` y `nrow=` ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-56-1.png" width="504" /> ] --- # Mini gráficos + `gghighlight()` .pull-left[ Veamos el paquete de extensión ggplot {gghighlight}. `gghighlight()` proyecta una "sombra" detrás de cada mini gráfico. ```r ggplot( data = vig, mapping = aes( x = fecha_sintomas, * fill = hospital)) + geom_histogram() + facet_wrap(~ hospital) + *gghighlight() ``` ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-58-1.png" width="504" /> ] --- # gghighlight .pull-left[ `gghighlight()` también puede resaltar valores específicos en otros tipos de gráficos ```r vig %>% # Obtenga los recuentos semanales por hospital group_by( hospital, semana = floor_date(fecha_sintomas, "week")) %>% count() %>% # parcela ggplot( mapping = aes( x = semana, y = n, color = hospital)) + geom_line() + * gghighlight( * hospital == "Port Hospital")+ theme(legend.position = "none") ``` ] .pull-right[ <img src="intro05-1_es_files/figure-html/unnamed-chunk-63-1.png" width="504" /> ] .nota[El código agrega los casos por semana y hospital, y pasa los recuentos a ggplot] ??? Aquí creamos un marco de datos de casos por semana y por hospital, y lo trazamos con `geom_line()`. El punto culminante se aplica al Hospital del Puerto. --- class: inverse, center, middle ## Ejercicio Ir a la página web del curso Abre el primer ejercicio del Módulo 5 e inicia sesión Sigue las instrucciones para abrir tu proyecto R "ébola" y continuar codificando Avisa a un instructor si no estás seguro de lo que tienes que hacer <img src="../../images/breakout/Safety Match - COVID artwork.png" width="50%" />