class: center, middle, inverse, title-slide # R aplicado a la ECH ## Setiembre 2020
Gabriela Mathieu ###
Creative Commons Attribution 4.0 International License
--- # ¿Qué haremos hoy? - Repaso del taller anterior - Introducción al paquete ggplot2 - Introducción al paquete sf y geouy --- class: inverse, center, middle # ggplot2 --- # Gramática de gráficos .left-column[ ![](img/gg.png) ] .right-column[ - ggplot2 permite hacer los gráficos por <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >capas</span>, hay diferentes capas pero <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >3 fundamentales</span> para hacer el gráficos, es decir, elementos que se van agregando. - <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >data</span>: el data frame que contiene las variables que vamos a graficar - <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >aesthetics mapping</span>: las variables que vamos a graficar y donde (x, y) - <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >geometrics</span>: el tipo de gráfico que haremos (puntos, líneas, barras, etc.) - capas adicionales para mejorar el gráfico (título, etiqueta, nombres de ejes, etc.) ] --- # Capas | Elemento | Descripción | Función | |---------------|:-------------:|:------:| |Data |Set de datos a plotear | ggplot() | |Aesthetics | Escalas en la que mapearemos los datos | aes() | |Geometries | Los elementos visuales utilizados para nuestros datos| geom_*() | |Facets | Para ploteos múltiples| facet_*() | |Statistics | Construye nuevas variables (count, density, etc.)| stat_*() | |Scales | Que elementos serán mapeados para las variables definidas | scale_*() |Coordinate | Cartesianas o polares | coord_*() | |Themes | Estilos gráficos | theme_*()| [R graph gallery](https://www.r-graph-gallery.com/portfolio/ggplot2-package/) --- # Capas ![](img/gg_data_mapping_geoms.png) - Las 3 primeras capas deben ser en este orden: `data`, `aesthetics`, `geometry` -- - Las capas se van superponiendo con un `+` -- - La estructura básica es como esta: <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >ggplot</span>(data = <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" ><df></span>) + <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >aes</span>(x = <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" ><Variable_1></span>, y = <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" ><Variable_2></span>) + <span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #b3e2cd !important;" >geom_bar</span>() --- # Ejemplo ```r library(ech) library(dplyr) load("data/ech19.RData") ech19 <- level_education(data = ech19) nivel <- get_estimation_mean(data = ech19, variable = "level_education", level = "i") nivel ``` ``` # A tibble: 5 x 4 level_education estimacion estimacion_low estimacion_upp <fct> <dbl> <dbl> <dbl> 1 Sin instruccion 0.0947 0.0927 0.0966 2 Primaria 0.294 0.291 0.297 3 Secundaria o UTU 0.458 0.454 0.461 4 Magisterio o profesorado 0.0244 0.0234 0.0253 5 Universidad o similar 0.129 0.127 0.132 ``` --- class: inverse, center, middle # ggplot2::ggplot() --- # Ejemplo mínimo: data + aes .pull-left[ ```r # Cargo el paquete library(ggplot2) ggplot(data = nivel, aes(x = level_education, y = estimacion*100)) ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-6-1.png" width="432" /> - En aes se definen los parámetros estéticos de las variables. - Aquellos que son fijos como color = "red", fill = "blue", etc. se escriben afuera de aes(). ] --- class: inverse, center, middle # ggplot2::geom_bar() --- # Ejemplo mínimo: data + aes + geom .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100)) + * geom_bar(stat = "identity") ``` El argumento de geom_bar(), stat='identity', indica que la altura de la barra debe ser igual al valor y. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-8-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot2::coord_flip() --- # Ejemplo mínimo: girar ejes .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100)) + geom_bar(stat = "identity") + * coord_flip() ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-10-1.png" width="432" /> ] --- # Etiqueta y relleno .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, * fill = level_education, * label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-12-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot2::geom_text() --- # Texto .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, fill = level_education, label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() + geom_text(size = 3, * position = position_stack(vjust = 0.5)) ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-14-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot2::labs() --- # Agrego nombre a ejes y título .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, fill = level_education, label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() + geom_text(size = 3, position = position_stack(vjust = 0.5)) + * labs(x = "Nive máximo alcanzado", * y = "Estimación", * title ="Estimación de máximo nivel alcanzado", * subtitle = "Fuente: ECH 2019") ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-16-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot::theme() --- # Elementos del tema .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, fill = level_education, label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() + geom_text(size = 3, position = position_stack(vjust = 0.5)) + labs(x = "Nive máximo alcanzado", y = "Estimación", title ="Estimación de máximo nivel alcanzado", subtitle = "Fuente: ECH 2019") + * theme(legend.position = "bottom") ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-18-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot::theme_*() --- # Temas - La función theme() controla el estilo del gráfico, permite definir el color de fondo, la apariencia de la leyenda, tamaños de letra, etc. - En la función theme_*() ya vienen predefinidos una variedad de temas. - Se pueden instalar un paquete específico que trae más temas: ggthemes. - Explorar otros [temas](https://ggplot2.tidyverse.org/reference/ggtheme.html). --- # Tema predefinido .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, fill = level_education, label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() + geom_text(size = 3, position = position_stack(vjust = 0.5)) + labs(x = "Nive máximo alcanzado", y = "Estimación", title ="Estimación de máximo nivel alcanzado", subtitle = "Fuente: ECH 2019") + theme(legend.position = "bottom") + * theme_minimal() ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-20-1.png" width="432" /> ] --- class: inverse, center, middle # ggplot::scale_fill_manual() --- # Escala de colores .pull-left[ ```r ggplot(data = nivel, aes(x = level_education, y = estimacion*100, fill = level_education, label = paste0(round(estimacion*100,0), "%"))) + geom_bar(stat="identity") + coord_flip() + geom_text(size = 3, position = position_stack(vjust = 0.5)) + labs(x = "Nive máximo alcanzado", y = "Estimación", title ="Estimación de máximo nivel alcanzado", subtitle = "Fuente: ECH 2019") + theme(legend.position = "bottom") + theme_minimal() + * scale_fill_manual(values = c("red", "blue", "green", "yellow", "gray")) ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-22-1.png" width="432" /> ] --- # Exportar un gráfico Es preferible el formato pdf ya que se guarda en formato vectorial y así evitamos que se pixele como puede ocurrir con los formatos png, jpg, etc. ```r *ggsave('<nombre>.pdf') ``` Podemos definir otros argumentos para variar el tamaño del gráfico, entre otras cosas. Para guardarlo en png cambiamos pdf por png. --- # Ejercicio - Estimar el máximo nivel educativo alcanzado según sexo - Usando la sintaxis del gráfico anterior hacer un diagrama de barras con la nueva estimación. - Guardarlo en formato png