igraph添加到地理地图

时间:2016-03-12 16:21:16

标签: r networking igraph

我正在使用R代表网络。我使用过“网络”包,但现在使用'igraph'。

我可以使用地理坐标绘制igraph。 我可以使用'maptools'(readShapePoly)绘制地图。

如何在地图上绘制igraph?

我尝试过new = FALSE并且添加= TRUE但是它不起作用,绘制igraph对象总是被覆盖。

greece <- readShapePoly.("Z:/GeoData/World_data/Basemaps/Greece/GRC_adm1.shp")

df<-data.frame("from" = c.("Athens", "Iraklio", "Thessaloniki", "Patra"), "to"= c("Thessaloniki", "Thessaloniki", "Athens", "Iraklio"))
meta <- data.frame("name"=c("Athens", "Iraklio", "Thessaloniki", "Patra"), 
               "lon"=c(23.72800,25.13356,22.94090,21.73507),  
               "lat"=c(37.98415,35.33349,40.63229,38.24628))


#plot it
g <- graph.data.frame(df, directed=T, vertices=meta)
lo <- layout.norm(as.matrix(meta[,2:3]))
plot(greece)
plot.igraph(g, layout=lo, add = T)

我见过这个解决方案,但我不想使用cario库,因为我使用的是地理数据,而不是图像作为基础图。 Using geo-coordinates as vertex coordinates in the igraph r-package

1 个答案:

答案 0 :(得分:4)

你可以这样做:

library(raster)
library(igraph)
greece <- getData('GADM', country='GRC', level=1)
df<-data.frame("from" = c("Athens", "Iraklio", "Thessaloniki", "Patra"), "to"= c("Thessaloniki", "Thessaloniki", "Athens", "Iraklio"))
meta <- data.frame("name"=c("Athens", "Iraklio", "Thessaloniki", "Patra"), 
               "lon"=c(23.72800,25.13356,22.94090,21.73507),  
               "lat"=c(37.98415,35.33349,40.63229,38.24628))
g <- graph.data.frame(df, directed=T, vertices=meta)
lo <- as.matrix(meta[,2:3])
plot(greece)
plot(g, layout=lo, add = TRUE, rescale = FALSE)

显然,您不希望将布局坐标标准化为从-1到1的比例,因为您的地理图不使用该比例。所以没有layout.norm()。但是,似乎最新的igraph默认情况下会自动规范化坐标下的坐标。起初,我没有在文档中找到负责任的rescale参数,必须使用debug(plot.igraph)来跟踪和查看它。 (虽然它已记录在?igraph.plotting中。)如果您设置了rescale=FALSEadd=TRUE,那么它应该按预期工作。

enter image description here