Rpubs Aquí
library(tidyverse)
library(gt)
library(plotly) # para gráficos interactivos
library(scales) # Para etiquetas con formato
library(treemapify) # para treemaps
library(ggrepel) # para que no se solapen las etiquetas
library(wordcloud2) # para visualizar nube de palabras.
Opción 2: Registro Nacional de Barrios Populares (ReNaBaP) en Argentina
renabap <- read.csv("data/renabap-datos-barrios-csv.csv", stringsAsFactors = TRUE)
# Creamos renabap_modif reemplazando el nombre Ciudad Autónoma de Buenos Aires por CABA para que se vea mejor como etiqueta
renabap_modif <- renabap %>%
mutate(
provincia = as.character(provincia), # primero lo paso a texto
provincia = ifelse(provincia == "Ciudad Autónoma de Buenos Aires", "CABA", provincia),
provincia = factor(provincia) # lo devuelvo a factor (si lo necesitas como factor)
)
dim(renabap)
## [1] 6467 17
colnames(renabap)
## [1] "id_renabap" "nombre_barrio"
## [3] "provincia" "departamento"
## [5] "localidad" "cantidad_viviendas_aproximadas"
## [7] "cantidad_familias_aproximada" "decada_de_creacion"
## [9] "anio_de_creacion" "energia_electrica"
## [11] "efluentes_cloacales" "agua_corriente"
## [13] "cocina" "calefaccion"
## [15] "titulo_propiedad" "clasificacion_barrio"
## [17] "superficie_m2"
summary(renabap_modif)
## id_renabap nombre_barrio provincia
## Min. : 1 Sin Nombre : 171 Buenos Aires:2065
## 1st Qu.:1778 San Cayetano : 40 Santa Fe : 469
## Median :3564 La Esperanza : 35 Chaco : 442
## Mean :3505 San Martín : 32 Misiones : 413
## 3rd Qu.:5244 Nueva Esperanza: 29 Tucumán : 370
## Max. :6866 San José : 27 Mendoza : 360
## (Other) :6133 (Other) :2348
## departamento localidad
## Capital : 610 Córdoba Capital : 177
## San Fernando : 220 Rosario : 119
## Rosario : 175 Resistencia : 105
## La Plata : 166 San Miguel De Tucumán: 81
## La Matanza : 163 Posadas : 76
## General José de San Martín: 139 Corrientes : 74
## (Other) :4994 (Other) :5835
## cantidad_viviendas_aproximadas cantidad_familias_aproximada
## Min. : 5.0 Min. : 6.0
## 1st Qu.: 30.0 1st Qu.: 33.0
## Median : 70.0 Median : 77.0
## Mean : 173.9 Mean : 191.4
## 3rd Qu.: 167.0 3rd Qu.: 184.0
## Max. :14000.0 Max. :15400.0
##
## decada_de_creacion anio_de_creacion
## Década 2000:1735 Min. :2010
## Década 2010:1604 1st Qu.:2012
## Década 1990: 995 Median :2014
## Década 1980: 790 Mean :2014
## Década 1970: 472 3rd Qu.:2016
## Década 1960: 361 Max. :2021
## (Other) : 510 NA's :4779
## energia_electrica
## Conexión irregular a la red :3670
## Conexión formal a la red con medidor domiciliario con factura :2187
## Conexión a la red con medidor comunitario : 194
## Conexión regular a la red con medidor domiciliario pero sin factura: 117
## No tiene conexión eléctrica : 104
## Conexión a la red con medidor compartido : 85
## (Other) : 110
## efluentes_cloacales
## Desagüe sólo a pozo negro/ciego u hoyo:4263
## Desagüe a cámara séptica y pozo ciego :1685
## Conexión formal a la red cloacal : 167
## Conexión irregular a la red cloacal : 146
## Red cloacal conectada a la red pluvial: 120
## Desagüe a intemperie o cuerpo de agua : 74
## (Other) : 12
## agua_corriente
## Conexión irregular a la red de agua :3662
## Bomba de agua de pozo domiciliaria :1020
## Conexión formal a la red de agua con factura : 545
## Bomba de agua de pozo comunitaria : 409
## Conexión regular a la red de agua pero sin factura: 339
## Camión cisterna : 324
## (Other) : 168
## cocina
## Conexión formal a la red de gas con factura: 93
## Conexión irregular a la red de gas : 8
## Energía eléctrica : 15
## Gas en garrafa :5547
## Leña o carbón : 804
##
##
## calefaccion titulo_propiedad
## Conexión formal a la red de gas con factura: 72 NO:6462
## Conexión irregular a la red de gas : 4 SI: 5
## Energía eléctrica :1873
## Gas en garrafa : 637
## Inexistente : 791
## Leña o carbón :2446
## Sin Datos : 644
## clasificacion_barrio superficie_m2
## Asentamiento :5253 Min. : 368
## Conjunto habitacional unifamiliar: 87 1st Qu.: 18385
## Villa :1127 Median : 46445
## Mean : 105799
## 3rd Qu.: 109727
## Max. :9715558
##
head(renabap_modif)
## id_renabap nombre_barrio provincia departamento localidad
## 1 1 Monterrey I Buenos Aires Pilar Presidente Derqui
## 2 2 Malvinas II Buenos Aires La Plata José Melchor Romero
## 3 3 Ferroviario Buenos Aires La Plata Angel Etcheverry
## 4 4 La Favelita Buenos Aires La Plata Tolosa
## 5 5 Casaca Buenos Aires La Plata City Bell
## 6 6 La Güemes Buenos Aires La Plata Manuel B. Gonnet
## cantidad_viviendas_aproximadas cantidad_familias_aproximada
## 1 40 44
## 2 290 319
## 3 133 146
## 4 122 134
## 5 20 22
## 6 12 13
## decada_de_creacion anio_de_creacion
## 1 Década 1990 NA
## 2 Década 1990 NA
## 3 Década 2000 NA
## 4 Década 1970 NA
## 5 Década 2000 NA
## 6 Década 1970 NA
## energia_electrica
## 1 Conexión regular a la red con medidor prepago
## 2 Conexión irregular a la red
## 3 Conexión irregular a la red
## 4 Conexión irregular a la red
## 5 Conexión irregular a la red
## 6 Conexión irregular a la red
## efluentes_cloacales
## 1 Desagüe a cámara séptica y pozo ciego
## 2 Desagüe a cámara séptica y pozo ciego
## 3 Desagüe sólo a pozo negro/ciego u hoyo
## 4 Desagüe sólo a pozo negro/ciego u hoyo
## 5 Desagüe a cámara séptica y pozo ciego
## 6 Desagüe sólo a pozo negro/ciego u hoyo
## agua_corriente cocina calefaccion
## 1 Bomba de agua de pozo domiciliaria Gas en garrafa Sin Datos
## 2 Conexión irregular a la red de agua Gas en garrafa Leña o carbón
## 3 Conexión formal a la red de agua con factura Gas en garrafa Leña o carbón
## 4 Conexión irregular a la red de agua Gas en garrafa Energía eléctrica
## 5 Bomba de agua de pozo domiciliaria Gas en garrafa Sin Datos
## 6 Conexión irregular a la red de agua Gas en garrafa Energía eléctrica
## titulo_propiedad clasificacion_barrio superficie_m2
## 1 NO Asentamiento 11674
## 2 NO Asentamiento 98093
## 3 NO Asentamiento 75887
## 4 NO Asentamiento 36889
## 5 NO Asentamiento 25768
## 6 NO Asentamiento 3424
ggplot() +
geom_histogram(data = renabap_modif, aes(x = cantidad_viviendas_aproximadas),
color = "black",
fill = "#FFD700",
binwidth = 75) +
scale_y_continuous(
limits = c(0, 2400),
breaks = seq(0, 2400, by = 200)) +
labs(title = "Gráfico 1: Distribución de la cantidad de viviendas por barrio",
x = "Cantidad de viviendas aproximadas",
y = "Frecuencia") + # En ese eje vemos cuántos barrios tienen esa cantidad de viviendas
theme_light()
ggplot() +
geom_histogram(
data = renabap_modif %>% filter(cantidad_viviendas_aproximadas <= 1000), # <-- recorte a 1000 viviendas
aes(x = cantidad_viviendas_aproximadas),
color = "black",
fill = "#FFD700",
binwidth = 50
) +
labs(
title = "Gráfico 2: Distribución de la cantidad de viviendas por barrio (< 1,000 viviendas)",
x = "Cantidad de viviendas aproximadas",
y = "Frecuencia",
caption = "Fuente: RENABAP (2024)"
) +
scale_x_continuous(labels = comma, limits = c(0, 1000)) + # eje X con límite y formato legible
scale_y_continuous(breaks = seq(0, 3000, by = 250)) + # eje Y más detallado
theme_light()
Agrupo los datos por provincia y luego la cantidad total de viviendas, como proxy del numero de barrios, y se ordena de mayor a menor.
library(dplyr)
# Agrupamos por provincia y departamento (para no mezclar capitales)
barriosxprovincia <- renabap_modif %>%
group_by(provincia, departamento) %>%
summarise(barrios = sum(cantidad_viviendas_aproximadas, na.rm = TRUE)) %>%
ungroup()
library(scales)
ggplot() +
geom_histogram(
data = renabap_modif %>% filter(superficie_m2 < 500000), #Para que se observe mejor el gráfico recortamos a superifices menores a 500 mil m2.
aes(x = superficie_m2),
color = "black",
fill = "orange",
binwidth = 5000
) +
labs(
title = "Gráfico 3: Distribución de la superficie de los barrios (< 500.000 m²)",
x = "Superficie (m²)",
y = "Frecuencia",
caption = "Fuente: RENABAP (2024)"
) +
scale_x_continuous(labels = comma) + # Eje X en formato legible
theme_minimal() # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
# Agrupamos otra vez solo por provincia (sumando todos sus departamentos)
barriosxprovincia_total <- barriosxprovincia %>%
group_by(provincia) %>%
summarise(total_barrios = sum(barrios, na.rm = TRUE)) %>%
arrange(desc(total_barrios))
# Para que pueda verse las etiquetas de provincia en el eje x se tiene que convertir de factor a carácter nuevamente a provincia
barriosxprovincia_total <- barriosxprovincia_total %>%
mutate(provincia = as.character(provincia))
library(scales)
ggplot() +
geom_bar(
data = barriosxprovincia_total,
aes(x = reorder(provincia, total_barrios), y = total_barrios), # para Ordenar las barras según el total de viviendas, de mayor a menor
stat = "identity", # para asegurarnos que las barras usen los valores reales "total_barrios"
fill = "#8B795E"
) +
coord_flip() + # esto invierte los ejes para que las provincias queden en el eje Y (vertical) y las barras se vean horizontales.
labs(
title = "Gráfico 4: Provincias con mayor número de viviendas (barrios populares)",
x = "Provincia",
y = "Total de viviendas (en miles)",
caption = "Fuente: RENABAP (2024)"
) +
scale_y_continuous(
labels = label_comma(scale = 1/1000),
breaks = seq(0, 500000, by = 100000)
) +
theme_minimal() + # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
theme(
plot.title = element_text(hjust = 0, size = 12, face = "bold"),
axis.text.y = element_text(size = 10),
axis.text.x = element_text(size = 10)
)
head(barriosxprovincia_total)
## # A tibble: 6 × 2
## provincia total_barrios
## <chr> <int>
## 1 Buenos Aires 535133
## 2 Santa Fe 84306
## 3 CABA 73195
## 4 Misiones 52995
## 5 Chaco 50711
## 6 Tucumán 43608
#FAMILIAS
# Agrupo por familias viviendo en barrios
familiaxprovincia <- renabap_modif %>%
group_by(provincia, departamento) %>%
summarise(familias = sum(cantidad_familias_aproximada, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'provincia'. You can override using the
## `.groups` argument.
familiaxprovincia
## # A tibble: 375 × 3
## provincia departamento familias
## <fct> <fct> <int>
## 1 Buenos Aires 25 de mayo 633
## 2 Buenos Aires 9 de julio 402
## 3 Buenos Aires Almirante Brown 21700
## 4 Buenos Aires Arrecifes 353
## 5 Buenos Aires Avellaneda 11881
## 6 Buenos Aires Azul 544
## 7 Buenos Aires Bahía Blanca 6574
## 8 Buenos Aires Balcarce 117
## 9 Buenos Aires Baradero 835
## 10 Buenos Aires Berazategui 1723
## # ℹ 365 more rows
familiaxprovincia_total <- familiaxprovincia %>%
group_by(provincia) %>%
summarise(total_familias = sum(familias, na.rm = TRUE)) %>%
arrange(desc(total_familias))
familiaxprovincia_total
## # A tibble: 24 × 2
## provincia total_familias
## <fct> <int>
## 1 Buenos Aires 588779
## 2 Santa Fe 92776
## 3 CABA 80517
## 4 Misiones 58322
## 5 Chaco 55821
## 6 Tucumán 48003
## 7 Salta 39319
## 8 Córdoba 37039
## 9 Río Negro 36239
## 10 Corrientes 29136
## # ℹ 14 more rows
*Calcumos la participacion de las familas por provincia respecto al total
familiaxprovincia_total <- familiaxprovincia_total %>%
mutate(
porcentaje = total_familias / sum(total_familias) * 100,
etiqueta = paste0(provincia, ", ", round(porcentaje, 1), "%")
)
library(treemapify)
# Ahora calculo la proporción de familias viviendo en barrios populares por provincia
# Con treemap cada rectángulo representa una provincia, así el tamaño de cada rectángulo es proporcional a la cantidad total de familias que viven en barrios populares en esa provincia.
ggplot() +
geom_treemap(
data = familiaxprovincia_total,
aes(area = total_familias, fill = total_familias)
) +
geom_treemap_text(
data = familiaxprovincia_total,
aes(area = total_familias, label = etiqueta),
colour = "white",
place = "centre",
size = 10,
reflow = TRUE
) +
scale_fill_gradient2(low = "#BFEFFF", mid = "#9AC0CD", high = "#68838B",midpoint = median(familiaxprovincia_total$total_familias), labels = comma
)+
labs(
title = "Gráfico 5: Proporción de familias viviendo en barrios populares por provincia",
subtitle = "En porcentajes (%)",
caption = "Fuente: RENABAP (2024)",
fill = "Familias"
) +
theme_minimal() # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
# Otras notas:
#geom_treemap_text, nos permite agregar la etiqueta de la provincia más su porcentaje
# scale_fill_gradiente nos pernmite identificar las provincias con más familias con el color mas oscuro hasta el color más tenue con provincias con menos familias
barriosxdepartamento <- renabap_modif %>%
group_by(departamento) %>%
summarise(barrios_depart=sum(cantidad_viviendas_aproximadas)) %>%
arrange(desc(barrios_depart)) %>%
head(10)
familiasxdepartamento <- renabap_modif %>%
group_by(departamento) %>%
summarise(familias_depart=sum(cantidad_familias_aproximada)) %>%
arrange(desc(familias_depart)) %>%
head(10)
Otra forma de cálculo
departamento_top10 <- renabap_modif %>%
group_by(departamento) %>%
summarise(
barrios_depart = sum(cantidad_viviendas_aproximadas),
familias_depart = sum(cantidad_familias_aproximada)) %>%
arrange(desc(familias_depart)) %>%
head(10)
Resultado:
promedios_provincia <- renabap_modif %>%
group_by(provincia) %>%
summarise(promedio_superficie=round(mean(superficie_m2),1),
promedio_vivienda=round(mean(cantidad_viviendas_aproximadas),0)) %>%
arrange(desc(promedio_vivienda))
Resultado:
barrios_por_decada <- renabap_modif %>%
group_by(decada_de_creacion) %>%
summarise(cantidad_barrios = n()) %>%
arrange(desc(cantidad_barrios))
Resultado:
Realizo un nueva clasificación para el tipo de conexion de la energía eléctrica en: regular, irregular y sin conexión, todo lo cual se ve reflejado en la base renabap_modif2.
renabap_modif2 <- renabap_modif %>%
mutate(conexion_clasificada=case_when(energia_electrica %in%
c("Conexión regular a la red con medidor domiciliario con consumo limitado", "Conexión regular a la red con medidor domiciliario pero sin factura", "Conexión regular a la red con medidor prepago", "Conexión formal a la red con medidor domiciliario con factura") ~ "Regular", energia_electrica %in%
c("Conexión irregular a la red",
"Energía solar", "Generador eléctrico a combustión", "Conexión a la red con medidor compartido", "Conexión a la red con medidor comunitario") ~ "Irregular", energia_electrica %in%
c("No tiene conexión eléctrica") ~ "Sin conexión"))
renabap_modif2 <- mutate(renabap_modif2,
conexion_clasificada=as.factor(conexion_clasificada))
tipo_conexion_electrica <- renabap_modif2 %>%
group_by(conexion_clasificada) %>%
summarise(cantidad_barrios=n())
total_barrios <- summarise(tipo_conexion_electrica, total_tipos=sum(cantidad_barrios))
tipo_conexion_electrica <- renabap_modif2 %>%
group_by(conexion_clasificada) %>%
summarise(cantidad_barrios = n()) %>%
mutate(
porcentaje = round(cantidad_barrios / sum(cantidad_barrios) * 100, 1)
)
Resultado:
tenencia_propiedad <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_barrios=n()) %>%
mutate(pct_titulo=cantidad_barrios/sum(cantidad_barrios)*100)
tenencia_familias <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_familias=sum(cantidad_familias_aproximada)) %>%
mutate(pct_tenencia_familias=round(cantidad_familias/sum(cantidad_familias)*100,2))
Otra forma de calculo En base a lo anterior, agrupo los datos según si el barrio tiene o no
tiene título de propiedad (valores “SI” o “NO”). Después calculo la
Cantidad de barrios con y sin título y el total de familias que viven en
esos barrios (cantidad_familias). Ya con la función mutate agrego dos
columnas con los porcentajes: % de barrios con o sin título y % de
familias afectadas por la (no) tenencia del título. Como son decimales
opto por redondearlas.
tenencia_resumen <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_barrios=n(),
cantidad_familias=sum(cantidad_familias_aproximada)) %>%
mutate(pct_titulo_propiedad=round(cantidad_barrios/sum(cantidad_barrios)*100,1),
pct_tenencia_familias=round(cantidad_familias/sum(cantidad_familias)*100,2))
Resultado:
Considerando que densidad = cantidad_familias_aproximada /
superficie_m2
renabap_modif2 <- renabap_modif2 %>%
mutate(densidad_familias_m2=round(cantidad_familias_aproximada/superficie_m2,4))
promedio_densidad <- round(mean(renabap_modif2$densidad_familias_m2),4)
promedio_densidad
## [1] 0.003
Calculo el umbral_critico en base al percentil 90, es decir el 10% de barrios que viven en las zonas más pobladas.
umbral_critico <- quantile(renabap_modif2$densidad_familias_m2, 0.90)
Ahora identificamos los barrios críticos, para ello filtro en base al
>= del umbral crítico previamente definido, para ver los resultados
selecciono las columnas que deseo mostrar, enfocándome en un top
20.
barrios_criticos <- renabap_modif2 %>%
filter(densidad_familias_m2>=umbral_critico) %>%
select(nombre_barrio,provincia,departamento,localidad,cantidad_familias_aproximada, superficie_m2,densidad_familias_m2) %>%
arrange(desc(densidad_familias_m2)) %>%
head(20)
renabap_criticos_top <- renabap_modif2 %>%
filter(densidad_familias_m2 >= umbral_critico) %>%
arrange(desc(densidad_familias_m2)) %>%
slice(1:20)
# Para añadir puntos (scatter plot) usamos geom_point
ggplot() +
geom_point(data = renabap_criticos_top, aes(x = superficie_m2, y = cantidad_familias_aproximada),
color = "red",
size = 3
) +
geom_text_repel(
data = renabap_criticos_top,
aes(x = superficie_m2, y = cantidad_familias_aproximada, label = nombre_barrio),
size = 3,
max.overlaps = 1000
) +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(
title = "Gráfico 6: Top 20 barrios críticos con mayor densidad habitacional",
subtitle = "Densidad medida en familias por m² (percentil 90)",
x = "Superficie del barrio (m²)",
y = "Cantidad de familias",
caption = "Fuente: RENABAP (2024)"
) +
theme_minimal()
#Notas a algunos comandos:
#geom_text_repel: añade etiquetas a los puntos sin que se solapen
# max.overlaps: 1000 Permite mayor cantidad de etiquetas antes de eliminarlas por solapamiento
Resultados
Esta pregunta permite evaluar los efectos de las politicas públicas
en este sector. Ya que la evolución en el tiempo permite identificar
patrones importantes: si los barrios más antiguos fueron integrándose
progresivamente al tejido urbano formal o si la exclusión permanece sin
importar la antigüedad. También permite ver si los barrios más recientes
nacen con mejores condiciones de acceso a servicios e infraestructura o
si la precariedad se mantiene como constante.
Procedemos al calculo Agrupamos y contamos por década y acceso a agua y efluentes cloacales.
agua_por_decada <- renabap_modif2 %>%
group_by(decada_de_creacion,agua_corriente) %>%
summarise(cantidad=n()) %>%
arrange(decada_de_creacion)
## `summarise()` has grouped output by 'decada_de_creacion'. You can override
## using the `.groups` argument.
cloacas_por_decada <- renabap_modif2 %>%
group_by (decada_de_creacion, efluentes_cloacales) %>%
summarise(cantidad=n()) %>%
arrange(decada_de_creacion)
## `summarise()` has grouped output by 'decada_de_creacion'. You can override
## using the `.groups` argument.
Aqui se calcula los porcentajes por década para comparar mejor
agua_por_decada <- agua_por_decada %>%
group_by(decada_de_creacion) %>%
mutate(pct_agua=round(cantidad/sum(cantidad)*100,1))
cloacas_por_decada <- cloacas_por_decada %>%
group_by (decada_de_creacion) %>%
mutate(pct_cloaca=round(cantidad/sum(cantidad)*100,1))
agua_formal <- agua_por_decada %>%
filter(agua_corriente=="Conexión formal a la red de agua con factura") %>%
select(decada_de_creacion, pct_agua)
cloaca_formal <- cloacas_por_decada %>%
filter(efluentes_cloacales=="Conexión formal a la red cloacal") %>%
select(decada_de_creacion,pct_cloaca)
Se une las dos últimas tablas para ver la relación
servicios_formales_por_decada <- left_join(agua_formal, cloaca_formal, by="decada_de_creacion")
Resultados:
# Agrupar por década y calcular superficie promedio
superficie_por_decada <- renabap_modif %>%
filter(!is.na(decada_de_creacion) & decada_de_creacion != "") %>%
group_by(decada_de_creacion) %>%
summarise(superficie_promedio = mean(superficie_m2, na.rm = TRUE), .groups = "drop") %>%
arrange(decada_de_creacion) %>%
mutate(decada_de_creacion = factor(decada_de_creacion, levels = decada_de_creacion))
ggplot() +
geom_line(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio, group = 1),
color = "#87CEFA",
size = 1.2
) +
geom_point(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio),
color = "#CD5555",
size = 3
) +
geom_text(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio, label = comma(round(superficie_promedio,0))),
vjust = -1,
size = 3
) +
labs(
title = "Gráfico 7: Superficie promedio de los barrios por década de creación",
x = "Década de creación",
y = "Superficie promedio (m²)",
caption = "Fuente: RENABAP (2024)"
) +
scale_y_continuous(limits = c(80000, 160000)) + # Eje Y entre 80000 y 160000 en función del dato mínimo y máximo
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # para poner las etiquetas en forma diagonal
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
#Notas:
# geom_line: conecta los puntos para mostrar la tendencia de la superficie promedio por década
# geom_point: añade los puntos sobre la línea
# geom_text: agrega los valores exactos como etiquetas sobre cada punto (en miles).
# Contar frecuencia de barrios y quedarnos con los 100 más frecuentes (excluyendo "Sin Nombre")
barrios_frecuentes <- renabap_modif %>%
filter(
!is.na(nombre_barrio) &
nombre_barrio != "" &
nombre_barrio != "Sin Nombre" # <-- Excluye explícitamente "Sin Nombre"
) %>%
group_by(nombre_barrio) %>%
summarise(frecuencia = n()) %>%
arrange(desc(frecuencia)) %>%
slice_max(order_by = frecuencia, n = 100) # <-- Top 100
#wordcloud2(data = barrios_frecuentes, size = 0.5, color = "random-dark")
library(htmltools)
# Creamos la nube
nube <- wordcloud2(data = barrios_frecuentes, size = 0.25, color = "random-dark")
# Le agregamos título y fuente
tagList(
tags$h3("Gráfico 8: Barrios más frecuentes en el RENABAP",
style = "text-align:center; font-size:17px;font-weight:bold; color:black;"), # acá se ajusta el tamaño del título
nube,
tags$p("Fuente: RENABAP (2024)",
style = "text-align:center; font-size:12px; color:black;")
)
Fuente: RENABAP (2024)
# Filtramos para evitar valores vacíos o NA
renabap_modif2 <- renabap_modif %>%
filter(!is.na(titulo_propiedad) & titulo_propiedad != "")
# Gráfico
ggplot()+
geom_point(data=renabap_modif2, aes(x = superficie_m2, y = cantidad_familias_aproximada),
alpha = 0.6, color = "darkblue") + # para transparentar los puntos y no saturen el gráfico
facet_wrap(~titulo_propiedad) +
# Etiquetas en los puntos (para ambas facetas)
geom_text_repel(
data = renabap_modif2 %>%
filter(cantidad_familias_aproximada > 1000), # <-- Ajusta el umbral según quieras
aes(
x = superficie_m2,
y = cantidad_familias_aproximada,
label = nombre_barrio
),
size = 3,
color = "black",
max.overlaps = 15
) +
facet_wrap(~titulo_propiedad) + # Se mantiene el facetado por título
scale_x_log10(labels = scales::comma) +
scale_y_continuous(labels = scales::comma) +
labs(
title = "Gráfico 9: Superficie vs Cantidad de Familias según Título de Propiedad",
subtitle = "Comparación de barrios con y sin título formal",
x = "Superficie del barrio (m², escala logarítmica)",
y = "Cantidad de familias",
caption = "Fuente: RENABAP (2024)"
) +
theme(
plot.subtitle = element_text(hjust = 0.5) # <-- Centra el subtítulo
)
## Warning: ggrepel: 159 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
#Notas:
# facet_wrap(~titulo_propiedad) divide el gráfico en dos paneles: barrios con y sin título de propiedad.
# geom_text_repel añade etiquetas a puntos destacados (barrios con más de 1,000 familias), evitando que se superpongan.
# scale_x_log10() convertimos a logaritmo el eje X, lo que es muy útil cuando hay valores muy diferentes entre sí.