Una abominación gráfica
Llega el verano, llega el relleno: rescato de mi disco duro una abominación gráfica,
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?
Llega el verano, llega el relleno: rescato de mi disco duro una abominación gráfica,
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?
A pesar de que el titular bajo el que aparece dice lo contrario,
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?).
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!):
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
Nota: KML es esto.
Si no sabéis a qué hace referencia el título, no os perdáis esto (y otros vídeos de la serie).
El otro día (véase esto) mostré una imagen de mi última charla sobre mapas. Hoy le toca el turno a esta otra:
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.
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:
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.
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.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)
Esto es un huertograma:
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:
Y esta es la misma información (resultados de las elecciones de 2015 en el RU) sobre un fabuloso cartograma:
¿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?
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.