Mapas de municipios españoles con dos nombres

Intro

En el anterior post, inspirado en este post de Suzan Baert decidí ver cuantos municipios españoles tenían dos nombres oficiales. La verdad es que acabé un poco harto (por un problema con los nombres compuestos …), PERO, quiero ver si aprendo un poco a hacer mapas. Antes sabía, pero ahora quiero hacerlos con el package sf. Vamos allá.

Lo primero es cargar los datos y señalar los pueblos con 2 nombres. Lo voy a hacer sólo de la primera forma en que lo hago en el post anterior; es decir, usaré la lista de municipios con dos nombres oficiales y me olvidaré de los municipios con nombre compuesto por el nombre en dos lenguas; por ejemplo: Maó-Mahón.

Cargando paquetes y datos

#devtools::install_github("perezp44/mypkgDataforblog")
library(mypkgDataforblog) #- personal pkg
library(stringr)
library(tidyverse)
library(kableExtra)
df <- cod_INE_muni_pjp
#- primer criterio (estricto): municipios con  "/" en NombreMuni
df <- df %>% mutate(yes_2_names_A = str_detect(NombreMuni, "/"))

Ok, ya tenemos marcados los municipios con 2 nombres oficiales.

Cargando los shapefiles

Cargo los shapefiles. Los tengo en mi paquete de datos y en formato sf

library(sf)
library(tmap)
zz <- CNIG_municipios_sf #- cargo shape files (8116 municipios)

Primer problema; además, no voy a solucionarlo (recordáis que hace dos o tres posts hablé de de que la perfección no mola!! pues eso …). Resulta que los datos con los nombres oficiales de municipios son del INE a 1 de diciembre de 2016, pero la shapefile es de 2011 o por ahí (tengo que actualizarla), y claro, desde 2011 ha ocurrido que algunos municipios que se han independizado, juntado etc…

En concreto:

  • 2 municipios que existían en 2011 (Cesuras y Oza), y por tanto tienen shape/polígono en mi archivo de lindes de 2011, decidieron juntarse y en 2016 ya eran Oza-Cesuras

  • Hay 11 municipios que existían en 2016 (y espero que sigan existiendo ahora en 2018) pero que no existían en 2011 y por tanto, no tienen shape en mi fichero. Por ejemplo, el municipio de Balanegra en Almería que se “independizo” de Berja en junio de 2015.

Si te entra curiosidad por saber que municipios son los que se han creado en los últimos años, puedes hacerlo con el chunk de abajo. Hay 4 pueblos de Granada.

aa <- df %>% select(INECodMuni, NombreMuni, NombreProv)
bb <- zz %>% select(INECodMuni, NombreMuni, NombreProv)
cambios_muni <- full_join(aa ,bb, by = "INECodMuni") %>% filter(is.na(NombreMuni.x)|is.na(NombreMuni.y)) 
#kable(cambios_muni)


Solo hay municipios con 2 nombres en 3 CC.AA.

Resulta que sólo hay municipios con 2 nombres en Navarra, País Vasco y Comunitat Valenciana, así que voy a seleccionar esas CC.AA. y el gráfico saldrá mejor. Haré uno para cada CC.AA.

Fusiono la lista de municipios (df) con la shapefile(zz):

df <- df %>% select(INECodMuni, NombreMuni, NombreCCAA, yes_2_names_A)
zz <- zz %>% select(INECodMuni, INECodProv, INECodCCAA)
aa <- right_join(zz, df, by = "INECodMuni")

A ver si me salen unos gráficos chulos. Los chunks de Suzan Baert en este post me fueron muy-muy útiles.

library(tmap)
library(viridisLite)
library(leaflet)

Cargo también el fichero con los lindes provinciales:

zz_prov <- CNIG_provincias_sf #- cargo shape files provincial
zz_prov <- zz_prov %>% select(INECodProv, NombreProv, INECodCCAA, NombreCCAA)
virpalette <- c("white", "#E41A1C")

#- Navarra
zz_b <- zz_prov %>% filter(INECodCCAA == "16")
bb <- aa %>% filter(INECodCCAA == "16")  #- 15 = Navarra; 16 = PV, 10 = Valencia
bb_a <- bb %>% mutate(yes_2_names_A = ifelse(yes_2_names_A == TRUE, "2 nombres", ""))
pais_vasco <- tm_shape(bb_a, alpha = 0.3) +
  tm_fill(col = "yes_2_names_A", palette = virpalette, title = "País Vasco") +
  tm_polygons(border.alpha = 0.6) +
  tm_layout(legend.position = c("left", "bottom"))
pais_vasco <-   pais_vasco + tm_shape(zz_b, alpha = 0.2) + tm_polygons(lwd = 1.8, border.col = "black", alpha = 0.2)

#- País Vasco
zz_b <- zz_prov %>% filter(INECodCCAA == "15")
bb <- aa %>% filter(INECodCCAA == "15")  #- 15 = Navarra; 16 = PV, 10 = Valencia
bb_a <- bb %>% mutate(yes_2_names_A = ifelse(yes_2_names_A == TRUE, "2 nombres", ""))
navarra <- tm_shape(bb_a, alpha = 0.3) +
  tm_fill(col = "yes_2_names_A", palette = virpalette, title = "Comunidad Foral de Navarra") +
  tm_polygons(border.alpha = 0.6) +
  tm_layout(legend.position = c("left", "bottom"))
navarra <-   navarra + tm_shape(zz_b, alpha = 0.2) + tm_polygons(lwd = 1.8, border.col = "black", alpha = 0.2)

#- Comunitat Valenciana
zz_b <- zz_prov %>% filter(INECodCCAA == "10")
bb <- aa %>% filter(INECodCCAA == "10")  #- 15 = Navarra; 16 = PV, 10 = Valencia
bb_a <- bb %>% mutate(yes_2_names_A = ifelse(yes_2_names_A == TRUE, "2 nombres", ""))
comunitat_val <- tm_shape(bb_a, alpha = 0.3) +
  tm_fill(col = "yes_2_names_A", palette = virpalette, title = "Comunitat Valenciana") +
  tm_polygons(border.alpha = 0.6) +
  tm_layout(legend.position = c("left", "bottom"))
comunitat_val <-   comunitat_val + tm_shape(zz_b, alpha = 0.2) + tm_polygons(lwd = 1.8, border.col = "black", alpha = 0.2)

#Show both plots next to each other (gracias Suzan!) ()
#tmap_arrange(navarra, pais_vasco, comunitat_val)

Lo mismo que me pasa con las datatables me pasa con los tmaps 1 . En RStudio sí se muestran, pero no se muestran en el blog; así que hasta que lo solucione, los grabo y los pego.

El gráfico esta decente, solo que al poner los 3 gráficos en cuadricula, parece que la Comunitat Valenciana sea la C.A. más pequeña, cuando no es así, en el siguiente gráfico sí se pueden comparar los tamaños.

Ahora un gráfico con las 3 CC.AA. juntas y sobre el mapa de España. A ver como salen las 3 juntas:

#Plot different regions
virpalette <- c("white", "#E41A1C")

CCAA_in <- c("País Vasco", "Navarra, Comunidad Foral de", "Comunitat Valenciana")
CCAA_in <- c("16", "15", "10")

zz_b <- zz_prov %>% filter(INECodCCAA %in% CCAA_in)

bb <- aa %>% filter(INECodCCAA %in% CCAA_in)  #- 15 = Navarra; 16 = PV, 10 = Valencia 
bb_a <- bb %>% mutate(yes_2_names_A = ifelse(yes_2_names_A == TRUE, "2 nombres", ""))

map_las_3 <- tm_shape(bb_a, alpha = 0.3) +
  tm_fill(col = "yes_2_names_A", palette = virpalette, title = "Municipios 2 nombres") +
  tm_polygons(border.alpha = 0.6) +
  tm_layout(legend.position = c("left", "bottom"))
map_las_3 <- map_las_3 + tm_shape(zz_b, alpha = 0.2) + tm_polygons(lwd = 1.8, border.col = "black", alpha = 0.2)

hh <- CNIG_CCAA_sf #- cargo shape files (8116 municipios)
map_las_3 <- map_las_3 + tm_shape(hh, alpha = 0.2) + tm_polygons(lwd = 1.8, border.col = "black", alpha = 0.2)

#tmap_arrange(map_las_3)

Ocurre lo mismo, como tengo problemas para mostrarlo en el blog, copio y muestro el tmap.

Bien. Decente.

Mapa con leaflet

A ver si puedo hacer un leaflet map. Ya tengo claro que lo tendré que guardar y pegar en un iframe.

library(leaflet)
virpalette <- rev(viridis(2)) #- gracias Suzan
CCAA_in <- c("País Vasco", "Navarra, Comunidad Foral de", "Comunitat Valenciana")
CCAA_in <- c("16", "15", "10")

zz_b <- zz_prov %>% filter(INECodCCAA %in% CCAA_in)
bb <- aa %>% filter(INECodCCAA %in% CCAA_in)  #- 15 = Navarra; 16 = PV, 10 = Valencia 

CCAA_3 <- tm_shape(bb) +
  tm_fill(col = "yes_2_names_A", palette = virpalette, title = "¿Dos nombres?", popup.vars = "NombreMuni") +
  tm_polygons() +
  tm_layout(legend.position = c("left", "bottom"))

my_tmap_leaf_1 <- tmap_leaflet(CCAA_3) 
library(htmlwidgets)
library(htmltools)
#saveWidget(my_tmap_leaf_1, "C://Users/perezp/Desktop/pp/my_tmap_leaf_1.html")
#<iframe seamless src="/posts/2018/2018_01_21_mapas_muni_2_nombres/my_tmap_leaf_1.html" width="100%" height="500"></iframe>

Para mi vale. Faltaría poner los lindes provinciales, pero ya vale por hoy. El problema de los htmlwidgets me fastidia un poquito. Otro día más.


PD: (para mí) en el source de este post tienes como hacer gráficos con ggplot2 y sf y alguna prueba más.


  1. Resulta que el blog no muestra bien los htmlwidgets. Es un problema que no acabo de entender del todo, pero parece que lo que pasa es que blogdown tiene un problema con los htmlwidgets si el hugo-theme usa las mismas librerias de ¿Javascipt?. No acabo de entenderlo del todo, pero no sólo me pasa a mi, le pasa a muuucha gente, por ejemplo aquí. Ya hay un package que parece que es la solución pero no me ha funcionado (supongo que no habré sabido). Ya probaré más adelante!!).

Share