在R的igraph包中,我正在努力使用纬度/经度坐标作为图形的布局来绘制社交网络.
想象一下这个简单的例子:一个有4个节点的网络,你知道它们的地理位置和连接:
df<-data.frame("from" = c("Bob", "Klaus", "Edith", "Liu"), "to"= c("Edith", "Edith", "Bob", "Klaus"))
Run Code Online (Sandbox Code Playgroud)
在这里你有节点的元数据,所以鲍勃住在纽约,柏林的克劳斯,巴黎的伊迪丝和北京的刘:
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))
Run Code Online (Sandbox Code Playgroud)
我们把g作为igraph对象......
g <- graph.data.frame(df, directed=T, vertices=meta)
Run Code Online (Sandbox Code Playgroud)
...我们将布局定义为经度/纬度坐标
lo <- layout.norm(as.matrix(meta[,2:3]))
plot.igraph(g, layout=lo)
Run Code Online (Sandbox Code Playgroud)
如果您使用这些(真实)地理坐标运行此示例,您将看到它相对于彼此正确的意义上的"相对"准确.但是,如果我绘制这样的坐标很多,那么世界笛卡尔地图看起来"伸展开来".
有没有办法可以在世界地图上绘制我的节点,以便坐标100%正确,我可以看到节点之间的连接?我真的想继续使用igraph包,因为当我想分析节点之间的链接时,它提供了我以后可能需要的许多功能.