Mapas

Una abominación gráfica

Llega el verano, llega el relleno: rescato de mi disco duro una abominación gráfica,

mapa-mundo-compressor-1

para el espanto de todos Vds.

Aparte de otras consideraciones, si la tasa es negativa, ¿se crea una imagen especular del perfil del país?

Este NO es el mapa de la violencia de género en España

A pesar de que el titular bajo el que aparece dice lo contrario,

mapa_violencia_genero_espana

no es el mapa de la conocida como violencia de género en España. Tasas del 10-20% significarían que en mi entorno tendrían que existir bastantes casos cuando, al contrario, no me consta ninguno. En el cuerpo de la noticia se lee que las tasas no son por cien sino por diez mil (si es que no son por cien mil: puestos a hacer bailar los ceros, ¿quién sabe?).

6602.767 km alrededor de España para visitar todas sus capitales de provincia

R

O tal dice lo que expongo a continuación.

Paquetes necesarios:

library(rvest)
library(caRtociudad)
library(reshape2)
library(ggmap)
library(plyr)
library(TSP)

Extracción de las provincias y sus capitales (de la Wikipedia):

capitales <- read_html("https://es.wikipedia.org/wiki/Anexo:Capitales_de_provincia_de_Espa%C3%B1a_por_poblaci%C3%B3n")
capitales <- html_nodes(capitales, "table")
capitales <- html_table(capitales[[1]])$Ciudad

capitales <- capitales[!capitales %in%
  c("Las Palmas de Gran Canaria",
    "Melilla", "Ceuta", "Mérida",
    "Santa Cruz de Tenerife",
    "Santiago de Compostela",
    "Palma de Mallorca")]

Y sus coordenadas:

coordenadas <- ldply(capitales, function(x) {
    tmp <- cartociudad_geocode(x)[1,]
    res <- data.frame(ciudad = x, provincia = tmp$province, lat = tmp$latitude, lon = tmp$longitude)
    if(is.na(res$lat)){
      tmp <- geocode(paste(x, "España"))
      res$lat <- tmp$lat
      res$lon <- tmp$lon
    }
    res
  })

# Pobre Logroño: ¡Cartociudad lo ubica en Asturias!
coords.logrono <- geocode("Logroño")
coordenadas$lat[coordenadas$ciudad == "Logroño"] <- coords.logrono$lat
coordenadas$lon[coordenadas$ciudad == "Logroño"] <- coords.logrono$lon

Construcción de la matriz simétrica de distancias (¡tarda un buen rato!):

Ficheros KML con R y ggmap

Fácil:

library(maptools)
library(ggmap)

# un fichero bajado el Ayto. de Madrid
# (catálogo de datos abiertos)
rutas <- getKMLcoordinates("dat/130111_vias_ciclistas.kml")

# procesando el fichero kml
rutas <- lapply(1:length(rutas),
    function(x) data.frame(rutas[[x]], id = x))
rutas <- do.call(rbind, rutas)

# mapa de Madrid
mapa <- get_map("Madrid",
    source = "stamen", maptype = "toner",
    zoom = 12)

# pintando los tramos sobre el mapa
ggmap(mapa) + geom_path(aes(x = X1, y = X2,
    group = id), data = rutas,
    colour = "red")

produce

rutas_ciclistas_madrid

Nota: KML es esto.

Google Maps (o CartoDB, etc.) "says 'NO'"

Si no sabéis a qué hace referencia el título, no os perdáis esto (y otros vídeos de la serie).

ComputerSaysNo

El otro día (véase esto) mostré una imagen de mi última charla sobre mapas. Hoy le toca el turno a esta otra:

britain

Se trata de un mapa de Gran Bretaña de alrededor de 1250 realizado por un tal Matthew Paris. Tiene una particularidad: cuenta E. Tufte que en un borde el autor indica que la isla debería ser más alargada, pero que, de respetar las proporciones, no le habría cabido el mapa en el pergamino. Y a la gente le hace gracia.

¡Qué primitivos eran aquellos antepasados nuestros...! ¿O no?

El sábado pasado, en Medialab Prado (gracias a @xvilan y @adolflow por la invitación) presenté lo que pudiera llamarse un pequeño manifiesto por una cartografía antropocéntrica.

En él mostré un mapamundi T-O (o tau-omega), que tiene esta pinta:

t_o_mapamundi

Se trata, efectivamente, de una representación del mundo conocido allá por el siglo XI. Se ven en él Europa, Asia y África separados por un mar en forma de T y encerrados en una enorme O. Supongo que todo el mundo entonces sabía que la costa no era tal y como se representaba allí. Que había cabos, islotes, itsmos, etc.

Grafos por vecindad en mapas

R

Dando vueltas (infructuosas) al asunto de los cartogramas he dado con un subproducto con el que, por hoy, me conformo: crear un grafo a partir de relaciones de vecindad entre polígonos. La magia, obra de [spdep::poly2nb](http://www.inside-r.org/packages/cran/spdep/docs/poly2nb); el código,

library(maptools)
library(spdep)
library(igraph)

# fichero descargado del INE
aragon <- readShapePoly("ccaa00c02.shp")
plot(aragon)

aragon_ine

aragon.nb <- poly2nb(aragon)

# vértices
vertices <- aragon@data
vertices$id <- 1:nrow(aragon@data)
vertices <- vertices[, c("id", setdiff(colnames(vertices), "id"))]

# coordenadas aproximadas de los vértices
my.layout.orig <- do.call(rbind,
    lapply(vertices$id,
            function(i)
              aragon@polygons[[i]]@Polygons[[1]]@labpt))

# aristas

aristas <- do.call(rbind,
    lapply(1:length(aragon.nb),
          function(x)
            data.frame(from = x,
                        to = aragon.nb[[x]])))
aristas <- aristas[aristas$from < aristas$to,]
aristas <- aristas[aristas$from %in% vertices$id,]
aristas <- aristas[aristas$to   %in% vertices$id,]

# grafo
g <- graph.data.frame(aristas, directed = FALSE, vertices)

plot(g,
      layout = my.layout.orig,
      vertex.label = NA,
      vertex.size = 0.1)

grafo_vecinos_aragon

Cartogramas vs huertogramas

Esto es un huertograma:

huertograma_es

Tiene la propiedad de que casi todos los pixels están encima de un huerto (o un erial, o en un cerro,…).

Este es otro huertograma:

huertograma_uk

Y esta es la misma información (resultados de las elecciones de 2015 en el RU) sobre un fabuloso cartograma:

cartograma_uk

¿Os habéis fijado cómo esa casi indistinguible mancha roja en la zona de Londres del huertograma adquiere su debida relevancia en el cartograma?

Grafos sobre mapas

R

He escrito de grafos, he escrito de mapas; hoy hablaré de la combinación de ambas cosas.

Tengo un grafo cuyos nodos están geoposicionados. Lo quiero estudiar utilizando herramientas de grafos (vía igraph) pero después representarlos sobre una capa con información geográfica (una foto satelital de Google Maps, vamos).

La red va a ser la de guifi.net en los derredores de Barcelona. guifi.net es un proyecto para crear una red de telecomunicaciones mancomunada, abierta, libre y neutral. Quienes forman parte de ella colocan antenas que se conectan con otras de la red y comienzan en enviar bits. Las antenas y sus conexiones conforman una red que se puede estudiar como cualquier otra: ¿qué nodos/enlaces son más centrales/críticos? Etc.