#Mapas en ggplot Introducción Un mapa es una representación gráfica simplificada de un territorio con propiedades métricas sobre una superficie bidimensional * Sirve para visualizar info que varía o se distribuye a lo largo del espacio * Toma en cuenta si el mapa es la opición más óptima para visualizar datos. Preguntate: ¿qué quiero decir con mi visualización? luego decide la mejor forma de mostrar la info

Información geográfica Info que tiene algún componente espacial; ubicación e info atributiva que detalle más sobre el elemento en cuestión. * COMPONENTE ESPACIAL + ATRIBUTOS * Componente espacial: puntos, líneas, áreas, matrices de pixeles, polígonos * Información vectorial: puntos, líneas o polígonos * Información raster: matrices de puntos * Atributos: nombres de calles, precios, población, índices, estadísticas de un lugar * Capas: herramientas de trabajo que se asemeja a las hojas apiladas de acetato * las capas se modifican de manera individual, y al final se juntan * CRS: sistema de coordenadas de referencia – sistema de coordenadas que se usa para localizar entidades geográficas. Debe incluir 1. proyección geográfica 2. un punto de referencia 3. un sistema de traducción a otro crs 4. un datum o elipsoide de referencia sistema 4326 es el más común, sistema de latitud-longitud

La info geográfica se almacena en archivos especiales. Los más comunes son: * ESRI * JSON, GeoJSON, TopoJSON * KML – no tan recomendable * EXCEL * TIFF - se abren con la librería raster en R

CLAVES DE INEGI * números que identifican a un estado, municipio, comunidad, colonia, manzana en particular * Estas claves funcionan como el id de un polígono, y son importantes como variables llave para pegar bases de datos de atributos con bases de datos geográficas

# Librerias ----
# Si no tienes alguna, instálala
library(tidyverse)
library(sf)
library(viridis)
library(plotly)

# 1. Leer las bases de datos ----
# Geometrías 
# Acá lo tuve que cambiar a la ruta en internet. 
# Si quieres hacerle como en el video, descarga el archivo para tenerlo localmente
# Desde este enlace: https://github.com/JuveCampos/periodismoDeDatos2021/raw/main/Sesión%2004%20-%20Mapas%20en%20Ggplot/Ejercicio%20práctico%20Clase%2004%20-%20Mapas/01_Datos/mpios.geojson
# Y guardalo en tu carpeta 01_Datos
mpios <- st_read("Ejercicio práctico Clase 04 - Mapas/01_Datos/mpios.geojson") %>% 
  select(-c(COV_, COV_ID))
## Reading layer `mpios_con_menos_islas_aun' from data source 
##   `/Users/sandymartinez/Documents/R/notas/Periodismo/Clase_periodismo/02_código/Ejercicio práctico Clase 04 - Mapas/01_Datos/mpios.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 2465 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -118.3651 ymin: 14.5321 xmax: -86.71041 ymax: 32.71865
## Geodetic CRS:  WGS 84
# Los objetos tipo "sf" son los que almacenan las geometrías
class(mpios)
## [1] "sf"         "data.frame"
# Verificamos las geometrias (tarda un poco)
plot(mpios, max.plot = 1)

# Leemos los Atributos 
idh <- read_csv("Ejercicio práctico Clase 04 - Mapas/01_Datos/Indice de Desarrollo Humano.csv") %>% 
  filter(Year == 2015)

# Vemos los años de los datos (exploración)
unique(idh$Year)
## [1] 2015
# Variables para hacer el merge
# idh = CODGEO
# mpios = CVEGEO 

# FUNCIONES PARA JUNTAR TABLAS
# merge()
# right_join() (hay mas! Checa: https://rpubs.com/Juve_Campos/juntando_tablas)

# 1. Juntando tablas usando merge
map <- merge(x = mpios,
      y = idh, 
      by.x = "CVEGEO", 
      by.y = "CODGEO", 
      all.x = TRUE)

# o tambien:  2. Juntando tablas usando right_join()
mapa <- right_join(mpios, idh, 
                   c("CVEGEO" = "CODGEO"))
# Ambas tablas son lo mismo


# Creamos la lista de estados
estados <- unique(map$NOM_ENT)

# Vemos toda la lista de estados
estados
##  [1] "Aguascalientes"                  "Baja California"                
##  [3] "Baja California Sur"             "Campeche"                       
##  [5] "Coahuila de Zaragoza"            "Colima"                         
##  [7] "Chiapas"                         "Chihuahua"                      
##  [9] "Ciudad de México"                "Durango"                        
## [11] "Guanajuato"                      "Guerrero"                       
## [13] "Hidalgo"                         "Jalisco"                        
## [15] "México"                          "Michoacán de Ocampo"            
## [17] "Morelos"                         "Nayarit"                        
## [19] "Nuevo León"                      "Oaxaca"                         
## [21] "Puebla"                          "Querétaro"                      
## [23] "Quintana Roo"                    "San Luis Potosí"                
## [25] "Sinaloa"                         "Sonora"                         
## [27] "Tabasco"                         "Tamaulipas"                     
## [29] "Tlaxcala"                        "Veracruz de Ignacio de la Llave"
## [31] "Yucatán"                         "Zacatecas"
# Seleccionamos un estado (ponle tu estado para probar)
estado_seleccionado <- "Morelos"

# Nos quedamos con solo la geometría del estado 
map_estado <- map %>% 
  filter(NOM_ENT == estado_seleccionado)

# Corroboramos
plot(map_estado, max.plot = 1)

# Visualizacion de datos ----

# Hacemos el mapa
mapx <- map_estado %>% 
  # Declaramos los elementos estéticos
  ggplot(aes(fill = Valor)) + 
  # Generamos el mapa (y ponemos los perimetros en blanco)
  geom_sf(color = "gray90") + 
  # Cambiamos los colores del relleno
  scale_fill_gradientn(colors = viridis(begin = 0,
                                        end = 1,
                                        n = 10)
                       # # Si quieres que los valores de la escala vayan de 0 a 1
                       # , limits = c(0,1) 
                       ) +
  
  # Otro ejemplo de paletas, por si viridis se te hace muy compleja :P 
  # Silencia la anterior y corre esta: 
  # scale_fill_gradientn(colors = c("red", "orange", "yellow", "green")) +
  
  labs(title = "Indice de desarrollo humano (IDH)", # Título
       subtitle = "Año 2015", # Subtitulo
       fill = "Valor del IDH", # Nombre de la escala
       caption = "Fuente: Informe de Desarrollo Humano Municipal 2010-2015.\nTransformando México Desde lo Local" # Pie de pagina
  ) + 
  # Subir y centrar el titulo de la barra 
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5)) + 
  # Modificar el tema de la gráfica
  theme(plot.title = element_text(hjust = 0.5, 
                                  color = "gray10", 
                                  face = "bold"), 
        plot.subtitle = element_text(hjust = 0.5, 
                                     color = "gray50", 
                                     face = "bold"), 
        plot.caption = element_text(hjust = 1), 
        axis.text = element_blank(), 
        axis.ticks = element_blank(),
        panel.background = element_blank(), 
        legend.position = "bottom"
  ) 

# Ver el mapa: 
mapx

# Convertir a mapa interactivo:
plotly::ggplotly(mapx)
# Guardar imagenes en ggplot (Ojo, esto funciona porque 
# tengo una carpeta 03_Lecturas en mi directorio). 

#ggsave(str_c("03_Lectura/mapa_",estado_seleccionado,".png"), 
      # width = 10, 
       #height = 6)
# Si no especificas W y H, se va a guardar con la proporción de la 
# ventana de tu Viewer. 


# Hacemos los demás mapas en bucle
for (estado_seleccionado in estados){
    
      map_estado <- map %>% 
        filter(NOM_ENT == estado_seleccionado)
      
      plot(map_estado, max.plot = 1)
      
      # Visualizacion de datos ----
      
      mapx <- ggplot(map_estado, 
             aes(fill = Valor)) + 
        geom_sf(color = "gray90") + 
        scale_fill_gradientn(colors = viridis(begin = 0, 
                                              end = 1, 
                                              n = 10)) + 
        labs(title = "Indice de desarrollo humano (IDH)", 
             subtitle = "Año 2015", 
             fill = "Valor del IDH", 
             caption = "Fuente: Informe de Desarrollo Humano Municipal 2010-2015.\nTransformando México Desde lo Local"
             ) + 
        guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5)) + 
        theme(plot.title = element_text(hjust = 0.5, 
                                        color = "gray10", 
                                        face = "bold"), 
              plot.subtitle = element_text(hjust = 0.5, 
                                           color = "gray50", 
                                           face = "bold"), 
              plot.caption = element_text(hjust = 1), 
              axis.text = element_blank(), 
              axis.ticks = element_blank(),
              panel.background = element_blank(), 
              legend.position = "bottom"
              ) 
      
      # Convertir a mapa interactivo
      plotly::ggplotly(mapx)
      
      # Guardar imagenes en ggplot 
     # ggsave(str_c("03_Lectura/mapa_",estado_seleccionado,".png"), 
      #       width = 10, 
       #      height = 6)
      
      print(str_c("Ya imprimí el estado ", estado_seleccionado))
}

## [1] "Ya imprimí el estado Aguascalientes"

## [1] "Ya imprimí el estado Baja California"

## [1] "Ya imprimí el estado Baja California Sur"

## [1] "Ya imprimí el estado Campeche"

## [1] "Ya imprimí el estado Coahuila de Zaragoza"

## [1] "Ya imprimí el estado Colima"

## [1] "Ya imprimí el estado Chiapas"

## [1] "Ya imprimí el estado Chihuahua"

## [1] "Ya imprimí el estado Ciudad de México"

## [1] "Ya imprimí el estado Durango"

## [1] "Ya imprimí el estado Guanajuato"

## [1] "Ya imprimí el estado Guerrero"

## [1] "Ya imprimí el estado Hidalgo"

## [1] "Ya imprimí el estado Jalisco"

## [1] "Ya imprimí el estado México"

## [1] "Ya imprimí el estado Michoacán de Ocampo"

## [1] "Ya imprimí el estado Morelos"

## [1] "Ya imprimí el estado Nayarit"

## [1] "Ya imprimí el estado Nuevo León"

## [1] "Ya imprimí el estado Oaxaca"

## [1] "Ya imprimí el estado Puebla"

## [1] "Ya imprimí el estado Querétaro"

## [1] "Ya imprimí el estado Quintana Roo"

## [1] "Ya imprimí el estado San Luis Potosí"

## [1] "Ya imprimí el estado Sinaloa"

## [1] "Ya imprimí el estado Sonora"

## [1] "Ya imprimí el estado Tabasco"

## [1] "Ya imprimí el estado Tamaulipas"

## [1] "Ya imprimí el estado Tlaxcala"

## [1] "Ya imprimí el estado Veracruz de Ignacio de la Llave"

## [1] "Ya imprimí el estado Yucatán"

## [1] "Ya imprimí el estado Zacatecas"