在R的igraph软件包中,我努力绘制使用纬度/经度坐标作为图形布局的社交网络。使用地理坐标作为igraph r-package中的顶点坐标
想象一下这个简单的例子:与你认识的地理位置4个节点和连接的网络:
df<-data.frame("from" = c("Bob", "Klaus", "Edith", "Liu"), "to"= c("Edith", "Edith", "Bob", "Klaus"))
这里有元数据的节点,让鲍勃住在纽约,克劳斯在柏林,伊迪丝在巴黎和刘在北京:
meta <- data.frame("name"=c("Bob", "Klaus", "Edith", "Liu"), "lon"=c(-74.00714, 13.37699, 2.34120, 116.40708), "lat"=c(40.71455, 52.51607, 48.85693, 39.90469))
我们做克的igraph对象...
g <- graph.data.frame(df, directed=T, vertices=meta)
...我们定义我们的布局经度/纬度坐标
lo <- layout.norm(as.matrix(meta[,2:3]))
plot.igraph(g, layout=lo)
如果您用这些(真实)地理坐标这个例子中,你会发现它处于“相对”准确感觉到这些位置相对于彼此是正确的。然而,如果我绘制了很多像这样的坐标,世界笛卡尔地图看起来就是“伸出的”。
有没有一种方法可以真正在世界地图上绘制我的节点,以便坐标100%正确,并且我可以看到我的节点之间的连接?我真的想继续使用igraph软件包,因为它提供了许多我以后可能需要的功能,当我想分析节点之间的链接时。
您是否考虑过从igraph节点制作数据框,然后使用ggplot子系统将它们绘制在地图上? – hrbrmstr
对@ hrbrmstr的建议,这会创建世界地图,但是覆盖或整合边缘和igraph功能超出了我的想象。要求(地图) 国家< - 地图数据(“世界”) 国家< - 子集(国家,地区!=“南极洲”) ggplot(meta,aes(x = lon,y = lat))+ geom_point = 22,fill =“red”,size = 6)+ geom_polygon(data = countries,aes(x = long,y = lat,group = group),col =“grey30”,fill =“transparent”,lwd = 0) – lawyeR
你需要在这里用'rescale = FALSE'参数调用'igraph :: plot()',否则它将沿两个维度的坐标重新调整为'[-1; 1]'间隔。 – deeenes