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; 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

Un comentario sobre “Grafos por vecindad en mapas

  1. Carlos 28 mayo, 2015 13:43

    Gráfico de burbujas coloreadas y superpuestas en cada vértice?

Los comentarios están desabilitados.