layout: true <div class="my-footer"><span>Intro to R/ggplot2</span></div> <!-- this adds the link footer to all slides, depends on my-footer class in css--> --- name: xaringan-title class: left, middle background-image: url(img/paisaje.jpeg) background-size: cover # .yellow[{ggplot2}] <img src="img/ggplot2.png" alt="ggplot2" width="180" /> ### .fancy[Visualización de datos] .large[Paul E. Santos Andrade | Data viz| 2021-01-21] <!-- this ends up being the title slide since seal = FALSE--> --- class: middle, center <img src="img/ggplot2.png" width="250px"/> .yellow[{ggplot2}] .large[es un sistema para crear gráficos de forma declarativa, basado en "The Grammar of Graphics" (Wilkinson, 2005).] Tú proporcionas los datos, le dices a .yellow[{ggplot2}] cómo asignar variables, qué fuentes gráficas usar y él se encarga de los detalles. .foot[[Descripción ggplot2](https://ggplot2.tidyverse.org/)] --- ## Ventajas de .yellow[ggplot2] - Gramática subyacente consistente (Wilkinson, 2005) - Especificación de capas muy flexible - Sistema de herramientas para pulir la apariencia - Comunidad activa y útil ([Twitter](https://twitter.com/search?q=%23ggplot2&src=typed_query), [R4DS Learning Community](https://www.rfordatasci.com/)) --- class: center, middle .izq[ <img src="https://raw.githubusercontent.com/Z3tt/TidyTuesday/master/plots/2020_31/2020_31_PalmerPenguins.png" width="350px" > ] .der[ <img src="https://raw.githubusercontent.com/Z3tt/TidyTuesday/master/plots/2020_04/2020_04_SpotifySongs.png" width="300px" > ] .foot[by: [Cédric Scherer](https://twitter.com/CedScherer)] --- class: center, middle <img src="https://raw.githubusercontent.com/Z3tt/TidyTuesday/master/plots/2020_29/2020_29_Astronauts_blur_color.png" width="600px" > .foot[by: [Cédric Scherer](https://twitter.com/CedScherer)] --- class: center, middle <img src="https://raw.githubusercontent.com/Z3tt/TidyTuesday/master/plots/2019_21/2019_21_PlasticWaste.png" width="1000px" > .foot[by: [Cédric Scherer](https://twitter.com/CedScherer)] --- class: center, middle <img src="https://raw.githubusercontent.com/Z3tt/TidyTuesday/master/plots/2020_34/2020_34_ExtinctPlants_3_legend_standalone_1.png" width="1000px" > .foot[by: [Cédric Scherer](https://twitter.com/CedScherer)] --- class: center, middle <img src="https://res.cloudinary.com/dt1gua70y/image/upload/v1610553394/tidytuesday_01_12_f6ywny.png" width="1000px" > .foot[by: [Martin Devaux](https://twitter.com/MartinDevaux)] --- class: inverse ## Libreria .yellow[ggplot2] es un paquete de .large[visualización de datos] desarrollado en el lenguaje de programación R, creado por Hadley Wickham en 2005. ```r install.packages("ggplot2") library(ggplot2) ``` .yellow[{ggplot2}] es parte de .yellow[{tidyverse}], un conjunto de paquetes que funcionan en armonía para manipular y explorar datos. ```r install.packages("tidyverse") library(tidyverse) ``` .yellow[tidiverse] esta formado por .yellow[dplyr], .yellow[tidyr], .yellow[ggplot2], .yellow[readr], .yellow[tibble], .yellow[purrr]... --- class: inverse ## Datos Datos del Estudio Nacional de Contaminación del Aire de Morbilidad y Mortalidad (NMMAPS), filtrado para la ciudad de Chicago y el intervalo de tiempo de enero de 1997 a diciembre de 2000. ```r chic <- readr::read_csv(here("data", "chicago-nmmaps.csv")) %>% mutate(season = factor(season, levels = c("Spring", "Summer", "Autumn", "Winter")), year = factor(year, levels = as.character(1997:2000))) chic %>% glimpse() ``` ``` ## Rows: 1,461 ## Columns: 10 ## $ city <chr> "chic", "chic", "chic", "chic", "chic", "chic", "chic", "c... ## $ date <date> 1997-01-01, 1997-01-02, 1997-01-03, 1997-01-04, 1997-01-0... ## $ death <dbl> 137, 123, 127, 146, 102, 127, 116, 118, 148, 121, 110, 127... ## $ temp <dbl> 36.0, 45.0, 40.0, 51.5, 27.0, 17.0, 16.0, 19.0, 26.0, 16.0... ## $ dewpoint <dbl> 37.500, 47.250, 38.000, 45.500, 11.250, 5.750, 7.000, 17.7... ## $ pm10 <dbl> 13.052268, 41.948600, 27.041751, 25.072573, 15.343121, 9.3... ## $ o3 <dbl> 5.659256, 5.525417, 6.288548, 7.537758, 20.760798, 14.9408... ## $ time <dbl> 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663... ## $ season <fct> Winter, Winter, Winter, Winter, Winter, Winter, Winter, Wi... ## $ year <fct> 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997... ``` --- class: center, middle, inverse # La estructura de .yellow[ggplot2] .large["The Grammar of Graphics"] --- ### La estructura de .yellow[ggplot2] 1. Datos .yellow[data] -> Los datos que desea visualizar. 2. Estética .yellow[aes()] -> como se asignan las variables de los datos a los atributos estéticos. 3. Capas .yellow[geom_ooo] y .yellow[stat_ooo] -> Las formas geométricas y los resúmenes estadísticos como se representarán los datos. 4. Escalas .yellow[scale_ooo] -> como visualizar los datos en las dimensiones estéticas. 5. Sistema de coordenadas .yellow[coord_ooo] -> sistema de coordenadas, describe cómo se asignan las coordenadas de datos al plano del gráfico. 6. Facetas .yellow[facet_ooo] -> La disposición de los datos en una cuadrícula de gráficos. 7. Temas visuales .yellow[theme()] y .yellow[theme_ooo] -> Los valores predeterminados visuales generales de un grafico. --- class: center, middle, inverse ## .fancy[Data] .yellow[ggplot(data, aes(x, y))] --- ### 1. Data .yellow[ggplot()] Necesitamos especificar los datos y las dos variables que queremos visualizar en la función .funcion[ggplot()]: .izq[ ```r ggplot( data = chic, mapping = aes( date, temp ) ) ``` Solo hay un panel vacío porque .yellow[{ggplot2}] no sabe cómo debería trazar los datos. ] .der[ ![](index_files/figure-html/unnamed-chunk-5-1.png)<!-- --> ] --- ### 1. Data .yellow[ggplot()] Necesitamos especificar los datos y las dos variables que queremos visualizar en la función .funcion[ggplot()]: .izq[ Dado que casi todos los .funcion[ggplot()] toman lo mismo argumentos .funcion[(data, mapeo = aes (x, y))], también podemos escribir: ```r ggplot( chic, aes( date, temp ) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-7-1.png)<!-- --> ] --- ### 1. Data .yellow[ggplot()] Necesitamos especificar los datos y las dos variables que queremos visualizar en la función .funcion[ggplot()]: .izq[ Dado que casi todos los .funcion[ggplot()] toman lo mismo argumentos .funcion[(data, mapeo = aes (x, y))], también podemos escribir: ```r ggplot( chic, aes( date, temp ) ) ``` ... o agrega las variables en la función .funcion[aes()]estética fuera de la función de .funcion[ggplot()] ```r ggplot(chic) + aes(date, temp) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-10-1.png)<!-- --> ] --- class: center, middle, inverse ## .fancy[Estética] ### .yellow[aes()] --- ### 2. Estética .funcion[aes()] Estética de los objetos geométricos y estadísticos, como: - posición a través de .yellow[x], .yellow[y], .yellow[xmin], .yellow[xmax], .yellow[ymin], .yellow[ymax], ... - colores mediante .yellow[color] y .yellow[fill] - transparencia vía .yellow[alfa] - tamaños a través de .yellow[size] y .yellow[width] - formas a través de .yellow[shape] y .yellow[linetype] En general, todo lo que se asigna a los datos debe estar envuelto en .funcion[aes()] mientras que los argumentos estáticos se colocan fuera de .funcion[aes()]. --- class: center, middle, inverse ## .yellow[.fancy[Capas - Layers]] ### `geom_` - `stat_` --- ### 3. Capas `geom_` - `stat_` Al agregar una o varias capas, podemos decirle a .yellow[{ggplot2}] cómo representar los datos. Hay muchos formas geométricas incorporadas (`geom_`) y transformaciones estadísticas (`stat_`): <img src="img/geoms.jpg" width="600px"> --- ### 3. Capas: .funcion[geom_point()] Diagrama de dispersión. .acid[numérico - numérico] .izq[ ```r ggplot(chic, aes( date, temp ) ) + geom_point() ``` o ```r chic %>% ggplot(aes( date, temp ) ) + geom_point() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-13-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_point()] Diagrama de dispersión. .acid[numérico - numérico] .izq[ .funcion[aes(.large[`color = var`])] ```r ggplot(chic, aes( date, temp ) ) + geom_point(aes( color = season ) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-15-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_point()] Diagrama de dispersión. .acid[numérico - numérico] .izq[ .funcion[aes(.large[`shape = var`])] ```r ggplot(chic, aes( date, temp ) ) + geom_point(aes( shape = season ) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-17-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_point()] Formas disponibles para gráficos de dispersión: <img src="img/shapes_point.png" width="40%" style="display: block; margin: auto;" /> --- ### 3. Capas: .funcion[geom_point()] Diagrama de dispersión. .acid[numérico - numérico] .izq[ .funcion[geom_point(.large[`shape = 21`])] ```r ggplot(chic, aes( date, temp ) ) + geom_point( shape = 21 ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-20-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_line()] Gráfico lineal. .acid[numérico - numérico] | .acid[categorico - numérico] .izq[ ```r ggplot(chic, aes( date, temp ) ) + geom_line() ``` o ```r chic %>% ggplot(aes( date, temp ) ) + geom_line() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-23-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_line()] Gráfico lineal. .acid[numérico - numérico] | .acid[categorico - numérico] .izq[ .funcion[aes(.large[`color = var`])] ```r ggplot(chic, aes( date, temp ) ) + geom_line(aes( color = year )) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-25-1.png)<!-- --> ] --- class: middle ### 3. Capas: .funcion[geom_line()] Tipos de líneas: <img src="img/line_type.png" width="50%" style="display: block; margin: auto;" /> --- ### 3. Capas: .funcion[geom_line()] Gráfico lineal. .acid[numérico - numérico] | .acid[categorico - numérico] .izq[ .funcion[geom_line(.large[`linetype = "dotted"`])] ```r ggplot(chic, aes( date, temp ) ) + geom_line( linetype = "dotted" ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-28-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_density()] Densidad – distribución. .acid[numérico] .izq[ ```r ggplot(chic, aes( o3 ) ) + geom_density() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-30-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_density()] Densidad – distribución. .acid[numérico] .izq[ .funcion[aes(.large[`color = var`])] ```r ggplot(chic, aes( o3 ) ) + geom_density(aes(color = season)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-32-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_density()] Densidad – distribución. .acid[numérico] .izq[ .funcion[aes(.large[`fill = var`])] ```r ggplot(chic, aes( o3 ) ) + geom_density(aes(fill = season)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-34-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_density()] Densidad – distribución. .acid[numérico] .izq[ .funcion[geom_density(aes(.large[`fill = var`]), alpha = .2)] ```r ggplot(chic, aes( o3 ) ) + geom_density(aes(fill = season), alpha = .2) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-36-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_histogram()] Histograma. .acid[numérico] .izq[ ```r ggplot(chic, aes( o3 ) ) + geom_histogram() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-38-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_histogram()] Histograma. .acid[numérico] .izq[ .funcion[geom_histogram(aes(.large[`fill = var`])] .funcion[geom_histogram(aes(.large[`color = var`])] .funcion[geom_histogram(`alpha = .1`)] ```r ggplot(chic, aes( o3 ) ) + geom_histogram(aes( fill = season )) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-40-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_histogram()] Histograma. .acid[numérico] .izq[ .funcion[geom_histogram(`bins = 40`)] `bins`, Determina el numero de columnas que se desea mostrar. ```r ggplot(chic, aes( o3 ) ) + geom_histogram(bins = 40) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-42-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_histogram()] Histograma. .acid[numérico] .izq[ .funcion[geom_histogram(`binwidth = 20`)] `binwidth`, Determina el rango de los intervalos para construir cada una de las columnas. ```r ggplot(chic, aes( o3 ) ) + geom_histogram(binwidth = 20) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-44-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_bar()] Gráfico de barras. .acid[numérico] | .acid[categórico] .izq[ ```r ggplot(chic, aes( death ) ) + geom_bar() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-46-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_col()] Gráfico de barras. .acid[categórico - numérico] .izq[ ```r chic %>% count(death, name = "count") %>% head() ``` ``` ## # A tibble: 6 x 2 ## death count ## <dbl> <int> ## 1 69 1 ## 2 73 1 ## 3 77 1 ## 4 79 1 ## 5 80 3 ## 6 81 6 ``` ```r chic %>% count(death, name = "count") %>% ggplot(aes(death, count)) + geom_col() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-49-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_col()] Gráfico de barras. .acid[categórico - numérico] .izq[ .funcion[geom_col(aes(.large[`fill = var`])] .funcion[geom_col(aes(.large[`color = var`])] .funcion[geom_col(`alpha = .1`)] ```r chic %>% count(season, death, name = "count") %>% head(n = 3) ``` ``` ## # A tibble: 3 x 3 ## season death count ## <fct> <dbl> <int> ## 1 Spring 80 1 ## 2 Spring 83 1 ## 3 Spring 84 3 ``` ```r chic %>% count(season, death, name = "count") %>% ggplot(aes(death, count)) + geom_col(aes(color = season)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-52-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_boxplot()] Gráfico de cajas – gráfico de bigotes. .acid[categórico - numérico] .izq[ ```r ggplot(chic, aes( date, temp ) ) + geom_boxplot() ``` o ```r chic %>% ggplot(aes( date, temp ) ) + geom_boxplot() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-55-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_boxplot()] Gráfico de cajas – gráfico de bigotes. .acid[categórico - numérico] .izq[ ```r ggplot(chic, aes( year, temp ) ) + geom_boxplot() ``` o ```r chic %>% ggplot(aes( year, temp ) ) + geom_boxplot() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-58-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_boxplot()] Gráfico de cajas – gráfico de bigotes. .acid[categórico - numérico] .izq[ .funcion[geom_col(aes(.large[`fill = var`])] .funcion[geom_col(aes(.large[`color = var`])] .funcion[geom_col(`alpha = .1`)] ```r ggplot(chic, aes( year, temp ) ) + geom_boxplot(aes(color = year)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-60-1.png)<!-- --> ] --- ### 3. Capas: .funcion[geom_boxplot()] Gráfico de cajas – gráfico de bigotes. .acid[categórico - numérico] .izq[ .funcion[geom_col(aes(.large[`fill = var`])] .funcion[geom_col(aes(.large[`color = var`])] .funcion[geom_col(`alpha = .1`)] ```r ggplot(chic, aes( year, temp ) ) + geom_boxplot(aes(color = season)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-62-1.png)<!-- --> ] --- ### 3. Capas: Múltiples capas .izq[ ```r chic %>% ggplot(aes( date, temp ) ) + geom_line() + geom_point() + geom_rug(sides = "l") ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-64-1.png)<!-- --> ] --- ### 3. Capas: Múltiples capas .izq[ ```r chic %>% ggplot(aes( date, temp ) ) + geom_point() + geom_smooth() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-66-1.png)<!-- --> ] --- ### 3. Capas: Múltiples capas .izq[ ```r chic %>% ggplot(aes( date, temp ) ) + geom_point() + geom_smooth(method = "lm") ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-68-1.png)<!-- --> ] --- ### 3. Capas: Múltiples capas .izq[ ```r chic %>% ggplot(aes( date, temp ) ) + geom_point(aes(color = year)) + geom_smooth() ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-70-1.png)<!-- --> ] --- class: center, middle, inverse ## .yellow[.fancy[Escalas]] ### `scales_` --- ### 4. Escalas .funcion[scale_] Se puede usar .funcion[scale_*()] para cambiar las propiedades de todas las dimensiones estéticas asignadas a los datos. En consecuencia, existen variantes de .funcion[scale_*()] para todas las estéticas como: - posición a través de .funcion[scale_x_ooo()] y .funcion[scale_y_ooo()] - colores a través de .funcion[scale_color_ooo()] y .funcion[scale_fill_ooo()] - transparencia a través de .funcion[scale_alpha_ooo()] - tamaños a través de .funcion[scale_size_ooo()] - formas a través de .funcion[scale_shape_ooo()] y .funcion[scale_linetype_ooo()] --- ### 4. Escalas .funcion[scale_] Se puede usar .funcion[scale_ooo()] para cambiar las propiedades de todas las dimensiones estéticas asignadas a los datos. En consecuencia, existen variantes de .funcion[scale_ooo()] para todas las estéticas como: - posición a través de .funcion[scale_x_ooo()] y .funcion[scale_y_ooo()] - colores a través de .funcion[scale_color_ooo()] y .funcion[scale_fill_ooo()] - transparencia a través de .funcion[scale_alpha_ooo()] - tamaños a través de .funcion[scale_size_ooo()] - formas a través de .funcion[scale_shape_ooo()] y .funcion[scale_linetype_ooo()] ... con extensiones (ooo) como: - .funcion[continuous()], .funcion[discrete()], .funcion[reverse(]), .funcion[log10()], .funcion[squrt()], .funcion[date()], .funcion[time()] ejes. - .funcion[continuous()], .funcion[discrete()], .funcion[manual()], .funcion[gradient()], .funcion[hue()], .funcion[brewer()] for colores (bordes - contenido). - .funcion[continuous()], .funcion[discrete()], .funcion[manual()], .funcion[ordinal()], .funcion[identity()], .funcion[date()] transparencias. - .funcion[continuous()], .funcion[discrete()], .funcion[manual()], .funcion[ordinal()], .funcion[identity()], .funcion[area()], .funcion[date()] tamaños. - .funcion[continuous()], .funcion[discrete()], .funcion[manual()], .funcion[ordinal()], .funcion[identity()] formas y tipos de línea. --- ### 4. Escalas .funcion[scale_x_ooo] -.funcion[scale_y_ooo] .izq[ Por ejemplo, para cambiar los títulos de los ejes: ```r chic %>% ggplot(aes( date, temp, color = season )) + geom_point() + scale_x_date( name = NULL) + scale_y_continuous( name = "Temperature (°F)") ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-72-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_x_ooo] -.funcion[scale_y_ooo] .izq[ Por ejemplo, para cambiar los títulos de los ejes: ```r chic %>% ggplot(aes( date, temp, color = season )) + geom_point() + scale_x_date(name = NULL, limits = c(as.Date("1997-01-01"), as.Date("1998-12-31"))) + scale_y_continuous( name = "Temperature (°F)") ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-74-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_x_ooo] -.funcion[scale_y_ooo] .izq[ Por ejemplo, para cambiar los títulos de los ejes: ```r chic %>% ggplot(aes( date, temp, color = season )) + geom_point() + scale_x_date(name = NULL, limits = c(as.Date("1997-01-01"), as.Date("1998-12-31"))) + scale_y_continuous(name = "Temperature (°F)", breaks = seq(0, 90, 20)) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-76-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_x_ooo] -.funcion[scale_y_ooo] .izq[ Por ejemplo, para cambiar los títulos de los ejes: ```r ggplot(chic, aes(date, temp)) + geom_point(aes(color = season)) + scale_y_continuous( name = NULL, breaks = c(0, 30, 60, 90), labels = c( '"Muy, frio!!!"', '"Frio"', '"Ideal"', '"Muy caliente!!!"' ) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-78-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_color_ooo] -.funcion[scale_fill_ooo] .izq[ Del mismo modo, podemos cambiar las propiedades de las otras características. por ejemplo, modificar los colores predeterminados: ```r ggplot(chic, aes(date, temp)) + geom_point(aes(color = season)) + scale_color_manual( values = c( "red", "green", "blue", "yellow" )) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-80-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_color_ooo] -.funcion[scale_fill_ooo] .izq[ Renombrar la leyenda: ```r ggplot(chic, aes(date, temp)) + geom_point(aes(color = season)) + scale_color_manual( values = c( "red", "green", "blue", "yellow" ), name = "Temporada:") ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-82-1.png)<!-- --> ] --- ### 4. Escalas .funcion[scale_color_ooo] -.funcion[scale_fill_ooo] .izq[ Renombrar la leyenda: ```r ggplot(chic, aes(date, temp)) + geom_point(aes(color = season)) + scale_color_manual( values = c( "red", "green", "blue", "yellow" ), name = "Temporada:", guide = FALSE) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-84-1.png)<!-- --> ] --- class: center, middle, inverse ## .yellow[.fancy[Sistema de coordenadas]] ### `coord_` --- ### 5. Sistema de coordenadas .funcion[coord_] Los sistemas de coordenadas combinan dos elementos que determinan la disposición de las características (generalmente x – y) para producir una posición “x, y” en el gráfico. Sistemas de coordenadas lineales que conservan la forma de las geoms: - .funcion[coord_cartesian()]: el valor predeterminado con dos ejes orientados perpendiculares fijos - .funcion[coord_flip()]: un sistema de coordenadas cartesianas con ejes invertidos - .funcion[coord_fixed()]: un sistema de coordenadas cartesianas con una relación de aspecto fija Sistemas de coordenadas no lineales que probablemente cambian las formas: - .funcion[coord_map()]: proyecciones de mapas - .funcion[coord_polar()]: un sistema de coordenadas polares - .funcion[coord_trans()]: transformaciones arbitrarias en las posiciones x - y --- ### 5. Sistema de coordenadas .funcion[coord_cartesian()] .izq[ ```r ggplot(chic, aes(date, temp)) + geom_line() + coord_cartesian( ylim = c(50, 70) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-86-1.png)<!-- --> ] --- ### 5. Sistema de coordenadas .funcion[coord_cartesian()] .izq[ ```r ggplot(chic, aes(year, temp)) + geom_boxplot() + coord_cartesian( ylim = c(50, 70) ) ``` ![](index_files/figure-html/unnamed-chunk-87-1.png)<!-- --> ] .der[ ```r ggplot(chic, aes(year, temp)) + geom_boxplot() + scale_y_continuous( limits = c(50, 70) ) ``` ![](index_files/figure-html/unnamed-chunk-88-1.png)<!-- --> ] --- ### 5. Sistema de coordenadas .funcion[coord_flip()] .izq[ ```r ggplot(chic, aes(season, temp)) + geom_col() ``` ![](index_files/figure-html/flipp_1-1.png)<!-- --> ] .der[ ```r ggplot(chic, aes(season, temp)) + geom_col() + * coord_flip() ``` ![](index_files/figure-html/flipp-1.png)<!-- --> ] --- ### 5. Sistema de coordenadas .funcion[coord_polar()] .izq[ ```r ggplot(chic, aes(season, temp)) + geom_col() ``` ![](index_files/figure-html/unnamed-chunk-89-1.png)<!-- --> ] .der[ ```r ggplot(chic, aes(season, temp)) + geom_col() + * coord_polar() ``` ![](index_files/figure-html/unnamed-chunk-90-1.png)<!-- --> ] --- class: center, middle, inverse ## .yellow[.fancy[Facetas - Paneles]] ### `facet_` --- ### 6. Facetas .funcion[facet_wrap()] .funcion[facet_wrap()] divide la imagen en múltiples paneles con base en una variable de agrupación: .izq[ ```r ggplot(chic, aes(temp, o3)) + geom_point(aes(color = year)) + *facet_wrap(~season) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-92-1.png)<!-- --> ] --- ### 6. Facetas .funcion[facet_grid()] .funcion[facet_grid()] genera una cuadricula en base a la combinación de dos variables de agrupación: .izq[ ```r ggplot(chic, aes(temp, o3)) + geom_point(aes(color = year)) + *facet_grid(year ~ season) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-94-1.png)<!-- --> ] --- ### 6. Facetas .funcion[facet_grid()] .funcion[facet_grid()] genera una cuadricula en base a la combinación de dos variables de agrupación: .izq[ ```r ggplot(chic, aes(temp, o3)) + geom_point(aes(color = year)) + *facet_grid(.~ season) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-96-1.png)<!-- --> ] --- ### 6. Facetas .funcion[facet_grid()] .funcion[facet_grid()] genera una cuadricula en base a la combinación de dos variables de agrupación: .izq[ ```r ggplot(chic, aes(temp, o3)) + geom_point(aes(color = year)) + *facet_grid(year ~.) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-98-1.png)<!-- --> ] --- class: center, middle, inverse ## .yellow[.fancy[Características visuales]] ### `theme()` - `theme_` --- ### 7. Características visuales .izq[ .funcion[theme()] - .funcion[theme_] controlan la visualización de todos los elementos de la grafico que no son datos a. títulos b. etiquetas c. fuentes d. fondo e. líneas de cuadrícula f. leyendas ![](index_files/figure-html/unnamed-chunk-99-1.png)<!-- --> ] .der[ ![](index_files/figure-html/unnamed-chunk-100-1.png)<!-- --> ] --- ### 7. Características visuales .izq[ ```r ggplot(chic, aes(date, temp)) + geom_point() + *theme( *axis.text = element_text( *size = 15, *face = "bold", *color = "red" *), *panel.grid.major.x = element_line( *linetype = "dotted", *color = "black" *), *plot.background = element_rect( *fill = "dodgerblue", *color = "goldenrod" * ) * ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-102-1.png)<!-- --> ] --- ### 7. Características visuales .izq[ ```r ggplot(chic, aes(date, temp)) + geom_point() + *theme_minimal() + *theme( *axis.title.x = element_blank(), *panel.grid.major.y = element_blank(), *panel.grid.minor = element_blank() * ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-104-1.png)<!-- --> ] --- ### 7. Características visuales .izq[ ```r ggplot(chic, aes(date, temp)) + geom_point() + *theme_gray() ``` ![](index_files/figure-html/unnamed-chunk-106-1.png)<!-- --> ] .der[ ```r ggplot(chic, aes(date, temp)) + geom_point() + *theme_minimal() ``` ![](index_files/figure-html/unnamed-chunk-108-1.png)<!-- --> ] --- class: center, middle # .fancy[Mas recursos] --- ## .fancy[Libros]: - .acid[ggplot2: Elegant Graphics for Data Analysis] [https://ggplot2-book.org/index.html](https://ggplot2-book.org/index.html) - .acid[Data Visualization: A Practical Introduction] Kieran Healy [socviz](https://socviz.co/) - .acid[Fundamentals of Data Visualization] Claus Wilke [https://clauswilke.com/dataviz/](https://clauswilke.com/dataviz/) - .acid[R Graphics Cookbook] Winston Chang [https://r-graphics.org/](https://r-graphics.org/) - .acid[R for Data Science] Hadley Wickham - Garrett Grolemund [r4ds](https://r4ds.had.co.nz/) - [r4ds-es](https://r4ds-en-espaniol.netlify.app/index.html) - .acid[Statistical Inference via Data Science A ModernDive into R and the Tidyverse] Chester Ismay - Albert Y. Kim [ModernDive](https://moderndive.com/) ... - .acid[ggplot2 extensions] [https://exts.ggplot2.tidyverse.org/](https://exts.ggplot2.tidyverse.org/gallery/) --- ### .fancy[Extenciones]: - .acid[patchwork] .izq[ ```r install.packages('patchwork') library(patchwork) panel_a <- chic %>% ggplot(aes(date, temp, color = year)) + geom_point()+ theme_minimal() + theme(legend.position = "bottom") panel_b <- chic %>% ggplot(aes(year, o3)) + geom_boxplot() + theme_minimal() # *panel_a + panel_b ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-110-1.png)<!-- --> ] --- ### .fancy[Extenciones]: - .acid[cowplot] .izq[ ```r install.packages('cowplot') library(cowplot) panel_a <- chic %>% ggplot(aes(date, temp, color = year)) + geom_point()+ theme_minimal() + theme(legend.position = "bottom") panel_b <- chic %>% ggplot(aes(year, o3)) + geom_boxplot() + theme_minimal() # *cowplot::plot_grid(panel_a, panel_b, ncol = 1) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-112-1.png)<!-- --> ] --- ### .fancy[Extenciones]: - .acid[ggrepel] .izq[ ```r chic %>% group_by(year, season) %>% summarise(mean = mean(temp)) %>% ggplot(aes(year, mean)) + geom_point(aes(color = season))+ * geom_text(aes(label = season, color = season)) + theme_minimal() + theme(legend.position = "none") ``` ![](index_files/figure-html/unnamed-chunk-113-1.png)<!-- --> ] .der[ ```r # install.packages('ggrepel') library(ggrepel) chic %>% group_by(year, season) %>% summarise(mean = mean(temp)) %>% ggplot(aes(year, mean)) + geom_point(aes(color = season))+ * geom_text_repel(aes(label = season, color = season)) + theme_minimal() + theme(legend.position = "none") ``` ![](index_files/figure-html/unnamed-chunk-114-1.png)<!-- --> ] --- ### .fancy[Extenciones]: - .acid[ggalt] .izq[ ```r install.packages("ggalt") library(ggalt) chic %>% group_by(year) %>% summarise(mean_tem = mean(temp), min_temp = min(temp), max_temp = max(temp)) %>% ggplot(aes(y = year, x = min_temp, xend = max_temp)) + geom_dumbbell(size = 3, color = "#e3e2e1", colour_x = "#5b8124", colour_xend = "#bad744", dot_guide = TRUE, dot_guide_size = .25) + theme(axis.title = element_blank()) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-116-1.png)<!-- --> ] --- ### .fancy[Extenciones]: - .acid[ggtext] .izq[ ```r install.packages("ggtext") library(ggtext) labels <- c( setosa = "<img src='img/setosa.jpg' width='100' height='50' /><br>*I. setosa*", virginica = "<img src='img/virginica.jpg' width='100' /><br>*I. virginica*", versicolor = "<img src='img/versicolor.jpg' width='100' /><br>*I. versicolor*" ) ggplot(iris, aes(Species, Sepal.Width)) + geom_boxplot() + scale_x_discrete( name = NULL, labels = labels ) + theme_minimal() + theme( axis.text.x = element_markdown(color = "black", size = 11) ) ``` ] .der[ ![](index_files/figure-html/unnamed-chunk-118-1.png)<!-- --> ] --- class: right, middle, inverse <img style="border-radius: 60%;" src="img/DSC_0140.JPG" width="250px"/> # Mas sobre mi... [<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <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"></path></svg> @PaulEfrenSantos](https://twitter.com/PaulEfrenSantos) [<svg viewBox="0 0 496 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg> @PaulESantos](https://github.com/PaulESantos) [<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"></path></svg> paulefrensa.rbind.io](https://paulefrensa.rbind.io)