Curso de gráficos en R

El gráfico presentado es un ejercicio de análisis de datos con R. Se hizo uso de la Encuesta Nacional de Ocupación y Empleo.

Los datos eseleccionados son datos de la población ocupada en el cuarto trimestr de 2023. Se seleccionó la variable categorica de estado civil. Por tanto, la gráfica se denomina como Estado civil de la población ocupada 2023

Estado civil de la población ocupada 2023

paquetes=c("survey","ggsurvey","forcats","haven","readxl","readxl","fastDummies","readr", "dplyr", "foreign", "tidyr", "ggplot2", "writexl","openxlsx","gridExtra")
for (i in paquetes) {if (!require(i, character.only = TRUE)) {install.packages(i);library(i, character.only = TRUE)} else {library(i, character.only = TRUE)}}
## Cargando paquete requerido: survey
## Cargando paquete requerido: grid
## Cargando paquete requerido: Matrix
## Cargando paquete requerido: survival
## 
## Adjuntando el paquete: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
## Cargando paquete requerido: ggsurvey
## Cargando paquete requerido: ggplot2
## Cargando paquete requerido: hexbin
## Cargando paquete requerido: dplyr
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Cargando paquete requerido: forcats
## Cargando paquete requerido: haven
## Cargando paquete requerido: readxl
## Cargando paquete requerido: fastDummies
## Thank you for using fastDummies!
## To acknowledge our work, please cite the package:
## Kaplan, J. & Schlegel, B. (2023). fastDummies: Fast Creation of Dummy (Binary) Columns and Rows from Categorical Variables. Version 1.7.1. URL: https://github.com/jacobkap/fastDummies, https://jacobkap.github.io/fastDummies/.
## Cargando paquete requerido: readr
## Cargando paquete requerido: foreign
## Cargando paquete requerido: tidyr
## 
## Adjuntando el paquete: 'tidyr'
## The following objects are masked from 'package:Matrix':
## 
##     expand, pack, unpack
## Cargando paquete requerido: writexl
## Cargando paquete requerido: openxlsx
## Cargando paquete requerido: gridExtra
## 
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
#2.  Directorio de trabajo


enoe=read_dta("ENOE_SDEMT423.dta")



# Variable filtro

enoe <- enoe %>%
  mutate(f = r_def == 0 & (c_res == 1 | c_res == 3) & eda >= 15 & eda <= 98)


enoe=enoe %>% filter(f==1)


# 3.1 Subconjuntos de datos

# CLASE2=Condicion de ocupacion
# Codigos: 1=Ocupado, 2=Desocupado, 3=Disponible, 4=No disponible

# Convertir la variable a dato numerico
enoe$e_con=as.numeric(enoe$e_con)

# Filtrar la base, necesitamos a los ocupados CLASE2=1
ocupados=enoe%>%filter(clase2==1)

# 3.2 Etiquetado de variables


# Codigos: 1=Hombre, 2=Mujer
ocupados <- ocupados %>%
  mutate(sex = fct_recode(factor(sex),
                          Hombre = "1",
                          Mujer = "2"))

# pos_ocu=Posicion en la ocupacion
# Codigos: 1=Suborninado, 2=Independiente, 3=Disponible, 0=No aplica
ocupados <- ocupados %>%
  mutate(pos_ocu = fct_recode(factor(pos_ocu),
                              "No Aplica" = "0",
                              "Suborninado" = "1",
                              "Empleadores" = "2",
                              "Cuenta propia" = "3",
                              "Sin pago" = "4"))

#---------------------------------------
# NOTA:
# Estamos recodificando en la misma
# variable, entonces se pierden los 
# valores originales.
#---------------------------------------
head (enoe)
## # A tibble: 6 × 115
##   r_def            loc   mun   est est_d_tri est_d_men  ageb t_loc_tri t_loc_men
##   <dbl+lbl>      <dbl> <dbl> <dbl>     <dbl>     <dbl> <dbl> <dbl+lbl> <dbl+lbl>
## 1 0 [Entrevista…    NA    10    30       124        NA     0 1 [Local… NA       
## 2 0 [Entrevista…    NA    13    30       124        NA     0 1 [Local… NA       
## 3 0 [Entrevista…    NA     5    20       123        NA     0 1 [Local… NA       
## 4 0 [Entrevista…    NA     7    30       124        NA     0 1 [Local… NA       
## 5 0 [Entrevista…    NA     5    20       123       115     0 1 [Local…  1 [Loca…
## 6 0 [Entrevista…    NA    14    30       124       116     0 1 [Local…  1 [Loca…
## # ℹ 106 more variables: cd_a <dbl+lbl>, ent <dbl+lbl>, con <dbl>, upm <dbl>,
## #   d_sem <dbl+lbl>, n_pro_viv <dbl>, v_sel <dbl+lbl>, n_hog <dbl+lbl>,
## #   h_mud <dbl+lbl>, n_ent <dbl+lbl>, per <dbl+lbl>, n_ren <dbl+lbl>,
## #   c_res <dbl+lbl>, par_c <dbl>, sex <dbl+lbl>, eda <dbl>, nac_dia <dbl+lbl>,
## #   nac_mes <dbl+lbl>, nac_anio <dbl>, l_nac_c <dbl+lbl>, cs_p12 <dbl+lbl>,
## #   cs_p13_1 <dbl+lbl>, cs_p13_2 <dbl+lbl>, cs_p14_c <chr>, cs_p15 <dbl+lbl>,
## #   cs_p16 <dbl+lbl>, cs_p17 <dbl+lbl>, n_hij <dbl+lbl>, e_con <dbl>, …
#4. Graficas (ggplot)

#4.1 Con 1 variable discreta

class(ocupados$sex)    
## [1] "factor"
# Gráfico = Datos + Estética + Geometría.
ocupados =ocupados%>%filter(as.numeric(e_con)>0 & as.numeric(e_con)<9) 
ocupados <- ocupados %>%
  mutate(e_con = fct_recode(factor(e_con),
                             Libre = "1",
                             Separado = "2",
                             Divorciado = "3",
                             Viudo = "4",
                             Casado = "5",
                             Soltero = "6"))

ggplot(ocupados, aes(x = e_con, y = ..prop.. * 100, group = 1)) +
  geom_bar(aes(fill = e_con), position = "dodge", stat = "count") +                            # Crea barras con porcentajes
  geom_text(aes(label = scales::percent(..prop..)), stat = 'count',                          # Ajusta el número mostrado arriba de las barras
            vjust = -0.5, position = position_dodge(0.5), size = 3.5) +
  labs(x = "Estado Civil", y = "Porcentaje", title = "Estado civil de los encuestados", 
       caption = "Nota: población de 15 años y más por estado civil\nFuente: ENOE cuarto trimestre 2023") +  # Añade la fuente y nota como pie de página
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5),                                              # Centrar el título horizontalmente
        plot.caption = element_text(hjust = 0, size = 9)) +                                  # Ajustes de estilo para la nota de fuente y la nota explicativa
  scale_y_continuous(labels = scales::percent_format(scale = 1)) 

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.