1

我创建了一个图表,igraph其中每个节点都有一个空间位置latlong。我想ggraph使用这些空间坐标来绘制这个网络来定义节点的位置/布局。关于如何做到这一点的任何想法?

我知道可以这样做igraph(请参阅下面的可重现示例),但我更喜欢使用 来执行此操作ggraph,特别是因为我想ggmap在绘图中添加一个图层。

可重现的例子

library(igraph)
library(ggraph)

# create network
  # nodes
  actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David","Esmeralda"),
                       age=c(48,33,45,34,21),
                       gender=c("F","M","F","M","F"),
                        long=c(-43.17536, -43.17411, -43.36605, -43.19155, -43.33636),
                        lat=c(-22.95414, -22.9302, -23.00133, -22.90353, -22.87253))

  # edges  
  relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David","David", "Esmeralda"),
                          to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                          same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
                          friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))

# Graph
  g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)

使用空间坐标绘制网络igraph

# get lat long coordinates for the layout
  lo <- layout.norm(as.matrix(actors[, c("long","lat")]))

#plot
  plot.igraph(g, layout=lo, rescale=T, vertex.label= NA)

在此处输入图像描述

4

1 回答 1

2

igraph您可以通过将 anXY属性设置为顶点,将坐标直接添加到图形对象中。ggraph将识别属性并相应地绘制顶点。

V(g)$x<-lo[,1]
V(g)$y<-lo[,2]

#plot
ggraph(g)+
  geom_edge_link()+
  geom_node_point()
于 2017-05-04T17:39:43.933 回答