Advertisement
yayopoint

Graficos ENE

Aug 16th, 2021 (edited)
2,376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 19.12 KB | None | 0 0
  1. ##########################
  2. # Autor: Andrés Necochea #
  3. ##########################
  4.  
  5. ######################################################
  6. # pastebin: https://pastebin.com/N2h6An0h            #
  7. ######################################################
  8.  
  9. # IMPORTANTE:
  10. # Los cálculos de indicadores y tasas se han tomado del siguiente manual:
  11. # https://www.ine.gob.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/libro-de-codigos/codigos-ene-2020.pdf
  12.  
  13. library(haven)
  14. library(ggplot2)
  15. library(ggpubr)
  16. library(gridExtra)
  17. library(stringr)
  18. library(scales)
  19.  
  20. #Función para descargar las bases de datos de la Encuesta Nacional de Empleos (Chile)
  21. #Descargará las bases de datos en el subdirectorio DB si es que no están descargadas,
  22. #Lueego las leerá usando el haven:read_spss
  23. #Las bases de datos serán cargadas en un ambiente (enviroment) que puede asignar a un objeto
  24. #Ejemplo de uso:
  25. # ENE <- descargarENE("2022-01","2022-12")
  26. # Argumentos:
  27. #   inicio: Mes inicio formato aaaa-mm
  28. #   fin:    Mes fin formato aaaa-mm
  29. descargarENE <- function(inicio, fin) {
  30.   # Url de bases de datos Encuestas hasta el año 2019
  31.   urlENE19 <- "https://ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/formato-spss/"
  32.   # url de bases de datos a partir de 2020
  33.   urlENE <- "https://www.ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/spss/"
  34.   # letras de los meses del año paraser usado en el sufijo del trimestre de las bases de datos
  35.   letras <- "defmamjjasonde"
  36.  
  37.   # establece un rango de fechas desde el mes de inicio hasta el mes de término
  38.   rangoFecha <- seq(as.Date(paste0(inicio,"-01")),
  39.                     to=as.Date(paste0(fin,"-01")),
  40.                     by="months")
  41.  
  42.   # Crea el directorio de bases de datos si no existe
  43.   if(!dir.exists(file.path("DB"))) {
  44.     dir.create(file.path("DB"))
  45.   }
  46.  
  47.   # Se crea un ambiente para almacenar las bases de datos
  48.   ENE <- new.env()
  49.  
  50.   # Descargará la base de datos de la encuesta nacional de empleos en formato SAV
  51.   # en Windows se requiere especificar mode "wb" para que el archivo pueda ser
  52.   # leído por read_spss de haven
  53.   for(fecha in as.character(rangoFecha)) {
  54.     nMes <- as.numeric(format(as.Date(fecha), "%m"))
  55.     nAno <- as.numeric(format(as.Date(fecha), "%Y"))
  56.     nombreENE <- paste0("ene-",
  57.                         format(as.Date(fecha), "%Y-%m"))
  58.     nombreENEL <- paste0(nombreENE, "-", substr(letras,nMes,nMes+2))
  59.     filePath <- file.path(paste0("DB/", nombreENE,".sav"))
  60.     if(!file.exists(filePath)) {
  61.       url <- sub("####", format(as.Date(fecha), "%Y"), urlENE)
  62.       download.file(paste0(url,nombreENEL,".sav"), destfile = filePath, mode="wb")
  63.       # Anteriormente los nombres de las bases de datos cambiaban para los años
  64.       # 2019 y anteriores
  65.       # Aunque se han estandarizado los nombres de las bases de datos, se ha mantenido
  66.       # estas líneas en forma de comentario.
  67.       #if (nAno <= 2019) {
  68.       #  url <- sub("####", format(as.Date(fecha), "%Y"), urlENE19)
  69.       #  #nombreENE19 <- sub("^(ene-[0-9]{4}-[0-9]{2})(-[a-z]{3})$","\\1", nombreENE)
  70.       #  download.file(paste0(url,nombreENE,".sav"), destfile = filePath)
  71.       #} else {
  72.       #  url <- sub("####", format(as.Date(fecha), "%Y"), urlENE)
  73.       #  download.file(paste0(url,nombreENEL,".sav"), destfile = filePath)
  74.       #}
  75.     }
  76.     nombreBaseDatos <- gsub("-", "_", nombreENE)
  77.     if(!exists(nombreBaseDatos, envir=ENE)) {
  78.       assign(nombreBaseDatos, read_spss(filePath), envir=ENE)
  79.     }
  80.   }
  81.  
  82.   return(ENE)
  83. }
  84.  
  85. # Generará las series ENE en un dataframe
  86. # Las series son indicadores estadísticos de acuerdo a las definiciones operacionales de INE
  87. generarSeriesENE <- function(ENE, appendTo=NULL) {
  88.   # Genera un listado de bases de datos contenidas en el ambiente
  89.   names(ENE) |>
  90.     grep("ene_[0-9]{4}_[0-9]{2}", x=_, value=TRUE) |>
  91.     sort() -> listadoBaseDatos
  92.  
  93.   if(!is.null(appendTo)) {
  94.     nombreSeries <- c("mes","desocupados","desocupadosH","desocupadosM","ocupados",
  95.                       "ocupadosH","ocupadosM","fuerzaTrabajo","fuerzaTrabajoH","fuerzaTrabajoM",
  96.                       "poblacionEdadTrabajar","poblacionEdadTrabajarH","poblacionEdadTrabajarM",
  97.                       "iniciadoresDisponibles","iniciadoresDisponiblesH","iniciadoresDisponiblesM",
  98.                       "tiempoParcialInvoluntario","tiempoParcialInvoluntarioH","tiempoParcialInvoluntarioM",
  99.                       "ocupadosBuscaronEmpleo","ocupadosBuscaronEmpleoH","ocupadosBuscaronEmpleoM",
  100.                       "ocupadosInformales","ocupadosInformalesH","ocupadosInformalesM",
  101.                       "ocupadosSectorInformal","ocupadosSectorInformalH","ocupadosSectorInformalM",
  102.                       "tasaDesocupacion","tasaDesocupacionH","tasaDesocupacionM",
  103.                       "tasaOcupacion", "tasaOcupacionH", "tasaOcupacionM","tasaParticipacion",
  104.                       "tasaPresionLaboral","tasaDesocupacionIniciadores", "tasaDesocupacionTPI")
  105.     if(all(names(appendTo) == nombreSeries)) {
  106.       series <- appendTo
  107.     } else {
  108.       stop("No es un data.frame de series ENE")
  109.     }
  110.   } else {
  111.     # Base de datos de las series estadísticas
  112.     series <- data.frame(mes=as.Date(numeric(0)),
  113.                          desocupados=numeric(0), desocupadosH=numeric(0), desocupadosM=numeric(0),
  114.                          ocupados=numeric(0), ocupadosH=numeric(0),ocupadosM=numeric(0),
  115.                          fuerzaTrabajo=numeric(0), fuerzaTrabajoH=numeric(0),fuerzaTrabajoM=numeric(0),
  116.                          poblacionEdadTrabajar=numeric(0), poblacionEdadTrabajarH=numeric(0), poblacionEdadTrabajarM=numeric(0),
  117.                          iniciadoresDisponibles=numeric(0), iniciadoresDisponiblesH=numeric(0), iniciadoresDisponiblesM=numeric(0),
  118.                          tiempoParcialInvoluntario=numeric(0), tiempoParcialInvoluntarioH=numeric(0), tiempoParcialInvoluntarioM=numeric(0),
  119.                          ocupadosBuscaronEmpleo=numeric(0), ocupadosBuscaronEmpleoH=numeric(0), ocupadosBuscaronEmpleoM=numeric(0),
  120.                          ocupadosInformales=numeric(0), ocupadosInformalesH=numeric(0), ocupadosInformalesM=numeric(0),
  121.                          ocupadosSectorInformal=numeric(0), ocupadosSectorInformalH=numeric(0), ocupadosSectorInformalM=numeric(0),
  122.                          stringsAsFactors=FALSE)
  123.   }
  124.  
  125.   ### Se calculará los principales indicadores de empleo
  126.   ### Para cada base de datos
  127.   ### Estos cálculos se han tomado de las instrucciones de los manuales de INE
  128.   for (nombreBaseDatos in listadoBaseDatos) {
  129.     # Personas Desocupadas
  130.     DO <- ENE[[nombreBaseDatos]]$cae_especifico == 8 | ENE[[nombreBaseDatos]]$cae_especifico == 9
  131.     # Personas Ocupadas
  132.     O <- ENE[[nombreBaseDatos]]$cae_especifico >= 1 & ENE[[nombreBaseDatos]]$cae_especifico <= 7
  133.     # Fuerza de trabajo
  134.     FT <- ENE[[nombreBaseDatos]]$cae_especifico >= 1 & ENE[[nombreBaseDatos]]$cae_especifico <= 9
  135.     # Población en Edad de Trabajar
  136.     PET <- ENE[[nombreBaseDatos]]$edad >= 15
  137.     # Iniciadores Disponibles
  138.     ID <- ENE[[nombreBaseDatos]]$cae_especifico == 10
  139.     # Personas a tiempo parcial involuntario
  140.     TPI <- O & ENE[[nombreBaseDatos]]$habituales <= 30 & ENE[[nombreBaseDatos]]$c10 == 1 &
  141.       (ENE[[nombreBaseDatos]]$c11 == 1 | ENE[[nombreBaseDatos]]$c11 == 2)
  142.     # Personas ocupadas que buscaron empleo
  143.     OBE <- O & (ENE[[nombreBaseDatos]]$e4 >=1 & ENE[[nombreBaseDatos]]$e4 <=6)
  144.     # Personas ocupadas informales
  145.     OI <- ENE[[nombreBaseDatos]]$ocup_form == 2
  146.     # Personas ocupadas en el sector informal
  147.     OSI <- ENE[[nombreBaseDatos]]$sector == 2
  148.     # Añadir indicadores a la serie estadística
  149.     series[nrow(series)+1, 1] <- as.Date(sub("(ene_)([0-9]{4}_[0-9]{2})", "\\2_01", nombreBaseDatos), "%Y_%m_%d")
  150.     i <- 2
  151.     for (indicador in list(DO,O,FT,PET,ID,TPI,OBE,OI,OSI)) {
  152.       series[nrow(series),i:(i+2)] <- c(sum(indicador*ENE[[nombreBaseDatos]]$fact_cal, na.rm=TRUE),
  153.                                         tapply(indicador*ENE[[nombreBaseDatos]]$fact_cal, ENE[[nombreBaseDatos]]$sexo, sum, na.rm=TRUE))
  154.       i <- i+3
  155.     }
  156.   }
  157.  
  158.   # Calcular tasas de acuerdo a las definiciones operacionales de INE
  159.   series$tasaDesocupacion <- with(series, desocupados/fuerzaTrabajo)
  160.   series$tasaDesocupacionH <- with(series, desocupadosH/fuerzaTrabajoH)
  161.   series$tasaDesocupacionM <- with(series, desocupadosM/fuerzaTrabajoM)
  162.   series$tasaOcupacion <- with(series, ocupados/poblacionEdadTrabajar)
  163.   series$tasaOcupacionH <- with(series, ocupadosH/poblacionEdadTrabajarH)
  164.   series$tasaOcupacionM <- with(series, ocupadosM/poblacionEdadTrabajarM)
  165.   series$tasaParticipacion <- with(series, fuerzaTrabajo/poblacionEdadTrabajar)
  166.   series$tasaPresionLaboral <- with(series, (desocupados+iniciadoresDisponibles+ocupadosBuscaronEmpleo)/(fuerzaTrabajo+iniciadoresDisponibles))
  167.   series$tasaDesocupacionIniciadores <- with(series, (desocupados+iniciadoresDisponibles)/(fuerzaTrabajo+iniciadoresDisponibles))
  168.   series$tasaDesocupacionTPI <- with(series, (desocupados+iniciadoresDisponibles+tiempoParcialInvoluntario)/(fuerzaTrabajo+iniciadoresDisponibles))
  169.  
  170.   return(series)
  171. }
  172.  
  173. # Generará series basadas en la pregunta E9
  174. # Las categorías se han agrupado para hacer más fácil la lectura de resultados
  175. generarSerieE9 <- function(ENE, appendTo=NULL) {
  176.   if (is.null(appendTo)) {
  177.     serieE9 <- data.frame(mes=as.Date(numeric(0)), motivoInactividad=numeric(0), Freq=numeric(0),
  178.                           hombres=numeric(0), mujeres=numeric(0))
  179.   } else {
  180.     nombreSerieE9 <- c("mes", "motivoInactividad", "Freq", "hombres", "mujeres")
  181.     if (all(names(appendTo) == nombreSerieE9)) {
  182.       serieE9 <- appendTo
  183.     } else {
  184.       stop("La base de datos no corresponde a las series E9")
  185.     }
  186.   }
  187.  
  188.   # Genera un listado de bases de datos contenidas en el ambiente
  189.   names(ENE) |>
  190.     grep("ene_[0-9]{4}_[0-9]{2}", x=_, value=TRUE) |>
  191.     sort() -> listadoBaseDatos
  192.  
  193.   for (nombreBaseDatos in listadoBaseDatos) {
  194.     mes <- as.Date(sub("(ene_)([0-9]{4}_[0-9]{2})", "\\2_01", nombreBaseDatos), "%Y_%m_%d")
  195.     f <- ENE[[nombreBaseDatos]]$activ == 3 &
  196.       ENE[[nombreBaseDatos]]$edad >= 15
  197.     if("e9_otro_covid" %in% names(ENE[[nombreBaseDatos]]) & "e12_otro_covid" %in% names(ENE[[nombreBaseDatos]])) {
  198.       subsetENE <- ENE[[nombreBaseDatos]][f,c("sexo", "e9", "e12", "e9_otro_covid", "e12_otro_covid" ,"fact_cal")]
  199.     } else {
  200.       subsetENE <- ENE[[nombreBaseDatos]][f,c("sexo", "e9", "e12" ,"fact_cal")]
  201.     }
  202.     attach(subsetENE)
  203.     motivoInactividad <- numeric(nrow(subsetENE))
  204.     # Espera iniciar un empleo o actividad por cuenta propia
  205.     motivoInactividad[e9 %in% c(1,2,9,13) | (is.na(e9) & e12 %in% 1:2)] <- 1
  206.     # Responsabilidades familiares (embarazo o cuidado de menores o personas dependientes)
  207.     motivoInactividad[e9 %in% c(3,11,12,14) | (is.na(e9) & e12 %in% c(4,10,11))] <- 2
  208.     # Estudios
  209.     motivoInactividad[e9 == 4 | (is.na(e9) & e12 == 3)] <- 3
  210.     # Es Jubilado/a, Rentista, Pensionado/a o Montepiada
  211.     motivoInactividad[e9 %in% 5:7 | (is.na(e9) & e12 %in% 5:7)] <- 4
  212.     # Razones de salud
  213.     motivoInactividad[e9 %in% c(8,10) | (is.na(e9) & e12 %in% c(8,9))] <- 5
  214.     # Razones de desaliento
  215.     motivoInactividad[e9 %in% 15:20] <- 6
  216.     # No quiere o no necesita trabajar
  217.     motivoInactividad[e9 == 21 | (is.na(e9) & e12 == 12)] <- 7
  218.     if ("e9_otro_covid" %in% names(ENE[[nombreBaseDatos]]) & "e12_otro_covid" %in% names(ENE[[nombreBaseDatos]])) {
  219.       # Razones asociadas al covid 19
  220.       motivoInactividad[(e9 == 22 & e9_otro_covid == 1) | (is.na(e9) & e12 == 13 & e12_otro_covid ==1)] <- 8
  221.       # Otras razones
  222.       motivoInactividad[(e9 == 22 & (e9_otro_covid == 0 | is.na(e9_otro_covid))) | (is.na(e9) & e12 == 13 & (e12_otro_covid ==0 | is.na(e12_otro_covid)))] <- 9
  223.     } else {
  224.       motivoInactividad[e9 == 22 | (is.na(e9) & e12 == 13)] <- 9
  225.     }
  226.     motivoInactividad[motivoInactividad == 0] <- NA
  227.     detach(subsetENE)
  228.    
  229.     motivoInactividad <- factor(motivoInactividad,
  230.                                 levels=1:9,
  231.                                 labels=c("Espera iniciar un empleo o actividad por cuenta propia", #1
  232.                                          "Responsabilidades familiares (embarazo, cuidado de menores o personas dependientes)", #2
  233.                                          "Estudios", #3
  234.                                          "Es Jubilado/a, Rentista, Pensionado/a o Montepiada", #4
  235.                                          "Razones de salud", #5
  236.                                          "Razones de desaliento", #6
  237.                                          "No quiere o no necesita trabajar", #7
  238.                                          "Razones asociadas al covid-19", #8
  239.                                          "Otras Razones")) #9
  240.     subsetENE <- data.frame(subsetENE, motivoInactividad)
  241.     tmi <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad))
  242.     tmis <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad + sexo))
  243.     serieE9 <- rbind(serieE9, data.frame(mes=rep(mes,nrow(tmi)), tmi,
  244.                                          hombres=tmis[,1], mujeres=tmis[,2]))
  245.     rm(f,motivoInactividad,tmi,tmis,subsetENE)
  246.   }
  247.   return(serieE9)
  248. }
  249.  
  250.  
  251. ##################################
  252. # Ejemplo de uso básico          #
  253. ##################################
  254. # Para un uso básico de estas funciones, se proporciona el siguiente ejemplo
  255. # Se descargará las bases de datos de la encuesta nacional de empleo
  256. # desde Enero de 2022 a Diciempre de 2022:
  257. #
  258. # ENE <- descargarENE("2022-01","2022-12")
  259. # seriesENE <-  generarSeriesENE(ENE)
  260. # serieE9 <- generarSerieE9(ENE)
  261. #
  262. # Para evitar cargar grandes cantidades de datos en la memoria, se puede generar
  263. # las series cargando conjuntos pequeñños de bases de datos y agregarlos usando el
  264. # argumento appendTo
  265. # Ejemplo:
  266. # ENE <- descargarENE("2019-01","2019-12")
  267. # seriesENE <-  generarSeriesENE(ENE)
  268. # ENE <- descargarENE("2020-01","2020-12")
  269. # seriesENE <-  generarSeriesENE(ENE, appendTo=seriesENE)
  270.  
  271. # Matriz con fechas de inicio y término para ser usadas en la descarga de bases de datos
  272. fechas <- rbind(c("2019-01", "2020-01", "2021-01", "2022-01", "2023-01"),
  273.                 c("2019-12", "2020-12", "2021-12", "2022-12", "2023-06"))
  274. rownames(fechas) <- c("fechaInicio", "fechaFin")
  275.  
  276. for (i in 1:ncol(fechas)) {
  277.   ENE <- descargarENE(fechas["fechaInicio",i], fechas["fechaFin",i])
  278.   if (i==1) {
  279.     seriesENE <-  generarSeriesENE(ENE)
  280.     serieE9 <- generarSerieE9(ENE)
  281.   } else {
  282.     seriesENE <-  generarSeriesENE(ENE, appendTo = seriesENE)
  283.     serieE9 <- generarSerieE9(ENE, appendTo = serieE9)
  284.   }
  285.   rm(ENE)
  286. }
  287.  
  288. rm(fechas, i)
  289.  
  290. ##################################
  291. # GRÁFICO 1:                     #
  292. # TASA DE DESEMPLEO SEGÚN GÉNERO #
  293. ##################################
  294.  
  295. ggplot(data = seriesENE, aes(x = as.Date(mes), y = tasaDesocupacion, color="Total"))+
  296.   geom_line(linewidth=1) +
  297.   geom_line(aes(y=tasaDesocupacionH, color="Hombres"),linewidth=1) +
  298.   geom_line(aes(y=tasaDesocupacionM, color="Mujeres"),linewidth=1) +
  299.   scale_color_manual("Género:", values = c("Total"="#00AABB", "Hombres"="#AA00BB", "Mujeres"="#AABB00")) +
  300.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  301.   scale_y_continuous(labels = scales::percent) +
  302.   theme(legend.position="top", axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  303.   labs(title = "Tasa de desocupación por trimestre móvil, según género",
  304.        x="Trimestre Móvil",
  305.        y="Tasa de desocupación %",
  306.        caption="Autor: Andrés Necochea, Fuente: Elaboración propia\n
  307.       en base a datos de Encuesta Nacional de Empleo\n
  308.       (Instituto Nacional de Estadística de Chile,2023)")
  309.  
  310. ##################################
  311. # GRÁFICO 2:                     #
  312. # TASA DE OCUPACIÓN SEGÚN GÉNERO #
  313. ##################################
  314.  
  315. ggplot(data = seriesENE, aes(x = as.Date(mes), y = tasaOcupacion, color="Total"))+
  316.   geom_line(linewidth=1) +
  317.   geom_line(aes(y=tasaOcupacionH, color="Hombres"),linewidth=1) +
  318.   geom_line(aes(y=tasaOcupacionM, color="Mujeres"),linewidth=1) +
  319.   scale_color_manual("Género:", values = c("Total"="#00AABB", "Hombres"="#AA00BB", "Mujeres"="#AABB00")) +
  320.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  321.   scale_y_continuous(labels = scales::percent) +
  322.   theme(legend.position="top", axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  323.   labs(title = "Tasa de ocupación por trimestre móvil, según género",
  324.        x="Trimestre Móvil",
  325.        y="Tasa de ocupación %",
  326.        caption="Autor: Andrés Necochea, Fuente: Elaboración propia\n
  327.       en base a datos de Encuesta Nacional de Empleo\n
  328.       (Instituto Nacional de Estadística de Chile,2023)")
  329.  
  330. ###################################
  331. # GRÁFICO 3:                      #
  332. # Motivo Inactividad según género #
  333. ###################################
  334.  
  335. levels(serieE9$motivoInactividad) <- str_wrap(levels(serieE9$motivoInactividad),40)
  336.  
  337. g1 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=Freq, fill=motivoInactividad)) +
  338.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  339.   scale_fill_brewer(palette = "Set1", name=str_wrap("Motivo por el cual no ha trabajado, buscado empleo o no ha estado disponible para trabajar en las últimas cuatro semanas",30)) +
  340.   guides(fill=guide_legend(legend.key.height=unit(2, "cm"),ncol=1)) +
  341.   labs(x="Trimestre Móvil", y="Población Total\n(Millones de personas)") +
  342.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  343.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  344.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  345.  
  346. g2 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=hombres, fill=motivoInactividad)) +
  347.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  348.   scale_fill_brewer(palette = "Set1") +
  349.   labs(x="Trimestre Móvil", y="Hombres\n(Millones de personas)") +
  350.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  351.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  352.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  353.  
  354. g3 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=mujeres, fill=motivoInactividad)) +
  355.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  356.   scale_fill_brewer(palette = "Set1") +
  357.   labs(x="Trimestre Móvil", y="Mujeres\n(Millones de personas)") +
  358.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  359.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  360.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  361.  
  362. legend <- get_legend(g1)
  363.  
  364. # Descomentar esta línea y dev.off para exportar a png
  365. #png("grafico3.png", width=8.5, height=11, units="in", res=300)
  366. grid.arrange(arrangeGrob(g1 + theme(legend.position = "none"),
  367.                          g2 + theme(legend.position = "none"),
  368.                          g3 + theme(legend.position = "none")),
  369.              as_ggplot(legend),
  370.              ncol=2,
  371.              widths=c(1.5,1),
  372.              top=grid::textGrob("Motivo por el que no ha trabajado o buscado empleo",gp=grid::gpar(fontsize=20,font=3)),
  373.              bottom="Autor: Andrés Necochea, Fuente: Elaboración propia en base a Encuesta Nacional de Empleo (INE Chile, 2023)"
  374. )
  375. #dev.off()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement