igraph 添加到地理地图
igraph add to geographic map
我将 R 用于网络。我使用了 'network' 包,但现在使用 'igraph'.
我可以使用地理坐标绘制 igraph。
我可以使用 'maptools'(readShapePoly).
绘制地图
如何在地图上绘制 igraph?
我已经尝试过 new=FALSE 和 add=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 库,因为我使用的是地理数据,而不是图像作为底图。
你可以这样做:
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=FALSE
和 add=TRUE
,那么它应该按预期工作。
我将 R 用于网络。我使用了 'network' 包,但现在使用 'igraph'.
我可以使用地理坐标绘制 igraph。 我可以使用 'maptools'(readShapePoly).
绘制地图如何在地图上绘制 igraph?
我已经尝试过 new=FALSE 和 add=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 库,因为我使用的是地理数据,而不是图像作为底图。
你可以这样做:
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=FALSE
和 add=TRUE
,那么它应该按预期工作。