Este cuaderno visualiza la evolución de la custodia de los hijos

Cargar librerías

if(!"tidyverse" %in% installed.packages()) {install.packages("tidyverse")}
if(!"scales" %in% installed.packages()) {install.packages("scales")}
if(!"ggrepel" %in% installed.packages()) {install.packages("ggrepel")}
library("tidyverse")
library("scales")
library("ggtext")   # Dar color a los textos de las leyendas

locale(date_names = "es", date_format = "%AD", time_format = "%AT",
  decimal_mark = ",", grouping_mark = ".", tz = "Europe/Berlin",
  encoding = "UTF-8", asciify = FALSE)
## <locale>
## Numbers:  123.456,78
## Formats:  %AD / %AT
## Timezone: Europe/Berlin
## Encoding: UTF-8
## <date_names>
## Days:   domingo (dom.), lunes (lun.), martes (mar.), miércoles (mié.), jueves
##         (jue.), viernes (vie.), sábado (sáb.)
## Months: enero (ene.), febrero (feb.), marzo (mar.), abril (abr.), mayo (may.),
##         junio (jun.), julio (jul.), agosto (ago.), septiembre (sept.),
##         octubre (oct.), noviembre (nov.), diciembre (dic.)
## AM/PM:  a. m./p. m.
Sys.setlocale(category = "LC_ALL", locale = "spanish")
## [1] "LC_COLLATE=Spanish_Spain.1252;LC_CTYPE=Spanish_Spain.1252;LC_MONETARY=Spanish_Spain.1252;LC_NUMERIC=C;LC_TIME=Spanish_Spain.1252"

Plantilla diseño

my_theme <- function(
  base_size = 11,
  base_color = "#5a5856",
  base_family = "sans"
  )
{
  # Establecemos la proporción del tamaño de la letra de cada uno de los elementos
  template <- 
    theme_bw(base_size=base_size, base_family = base_family) +
    theme(
      panel.border = element_rect(colour = base_color),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_line(color = "grey"),
      plot.title = element_text(
        size = base_size+2,
        face = "bold",
        color = base_color,
        vjust = 1.25, 
        hjust = 0.5),
      plot.subtitle = element_text(size=base_size + 2, color = base_color, hjust = 0.5),
      plot.caption = element_text(hjust = 1, size=base_size - 1, color = base_color),
      legend.position ="top",
      legend.margin =  margin(0,0,0,0,unit="pt"),
      legend.text = element_text(size=base_size + 1),
      text = element_text(size=base_size, color = base_color),
      axis.title.x = element_text(
        size=base_size + 1,
        vjust=0,
        color = base_color,
        margin = unit(c(3, 0, 0, 0), "mm")
      ),
      axis.title.y = element_text(
        size=base_size + 1, 
        vjust=1.25,
        color = base_color,
        margin = unit(c(0, 3, 0, 0), "mm")
      ),
      axis.title.y.right=element_text(
        size=base_size + 1,
        color = base_color,
        margin = unit(c(0, 0, 0, 3), "mm")
      ),
      axis.text.x = element_text(size=base_size - 1, color = base_color),
      axis.text.y = element_text(size=base_size-1,color = base_color),
      strip.text = element_text(size=base_size + 2, color = base_color),
      strip.text.x = element_text(size=base_size + 1, color = base_color),
      strip.text.y = element_text(size=base_size + 1, color = base_color),
      strip.background = element_rect(color = NA, fill = NA)
    )
  return(template)
}

Leer y preparar datos

url_custodias <-  "https://www.ine.es/jaxiT3/files/t/es/csv_bdsc/20692.csv?nocab=1"
custodias <- read_csv2 (url_custodias) %>%
  filter(`Tipo de divorcio` != "Total") %>%
  filter(`Cónyuge que debe ejercer la custodia` == "Padre"
       | `Cónyuge que debe ejercer la custodia` == "Madre"
       | `Cónyuge que debe ejercer la custodia` == "Custodia compartida") %>%
  group_by(Periodo, `Tipo de divorcio`) %>%
  summarise(
    total_tipo_divorcio = sum(Total),
    `Cónyuge que debe ejercer la custodia` = `Cónyuge que debe ejercer la custodia`,
    Total = Total
  ) %>%
  mutate (porcentaje = round((Total *100) / total_tipo_divorcio,0)) %>%
  ungroup()
diferencias <- custodias  %>%
  filter (Periodo == min(Periodo) | Periodo == max(Periodo)) %>%
  select(Periodo, `Tipo de divorcio`, `Cónyuge que debe ejercer la custodia`, porcentaje) %>%
  pivot_wider (names_from = Periodo, values_from= "porcentaje") %>%
  mutate(diferencia = `2022` - `2013`) %>%
  pivot_longer(`2013` | `2022`, names_to = "Periodo", values_to = "porcentaje") %>%
  filter(Periodo == max(Periodo)) %>%
  mutate(Periodo = as.numeric(Periodo))

Custodias Acuerdo vs. contencioso

color_custodia <- c("Madre" = "#e4abfa", "Padre" = "#05c3e8", "Custodia compartida" = "#0d8603")

ggplot(data = custodias) +
  geom_line(
    aes(
      x = Periodo, y = porcentaje,
      color = `Cónyuge que debe ejercer la custodia`
    )
  ) +
  geom_point(
    aes(
      x = Periodo, y = porcentaje,
      color = `Cónyuge que debe ejercer la custodia`
    ),
    size = 4,
    alpha = 0.5
  ) +
  geom_text (
    data = custodias %>%
      filter(`Cónyuge que debe ejercer la custodia` == "Custodia compartida"),
    aes(x = Periodo, y = porcentaje + 4,
        label = paste0(porcentaje,"%")
    ),
    size = 3,
    color = "#5a5856"
  ) +
  geom_text (
    data = custodias %>% filter( Periodo == min(Periodo) | Periodo == max(Periodo)),
    aes(x = Periodo, y = porcentaje + 4,
        label = paste0(porcentaje,"%")
    ),
    size = 3,
    color = "#5a5856"
  ) +
  geom_label(
    data = diferencias %>% filter (diferencia < 0),
    aes(x = Periodo + 1.2, y = porcentaje ,
      label = paste0(diferencia,"%")
    ),
    size = 2.5,
    color = "red4",
    fill = "red4",
    alpha = 0.3,
    vjust = 0.5 
  ) +
  geom_label(
    data = diferencias %>% filter (diferencia > 0),
    aes(x = Periodo + 1.2, y = porcentaje ,
      label = paste0(diferencia,"%")
    ),
    size = 2.5,
    color = "#5a5856",
    fill = "#5a5856",
    alpha = 0.3,
    vjust = 0.5
  ) +
  scale_x_continuous(
    breaks = c(2013, 2022)
  ) +
  scale_y_continuous(
    breaks = c(0, 25, 50, 75, 100),
    labels = scales::label_percent(scale = 1)
  ) +
  scale_color_manual (values = color_custodia) +
  labs(
    title =
    "Custodia de los hijos para la 
      <span style='color:#e4abfa'>madre</span>
      , el
      <span style='color:#05c3e8'>padre</span>
      o la
      <span style='color:#0d8603'>compartida</span>",
    x = "",
    y = "",
    caption = "by @congosto\nFuente: INE",
    color = ""
  ) +
  facet_wrap(~`Tipo de divorcio`) +
  my_theme() +
  theme(
    legend.position = "None",
    axis.ticks=element_blank(),
    panel.border = element_blank(),
    plot.title = element_markdown(size=12)
  )