Grafos por vecindad en mapas
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)