【问题标题】:Plot a graph with spatial coordinates lat long using ggraph使用 ggraph 绘制具有空间坐标 lat long 的图
【发布时间】:2017-10-02 23:06:55
【问题描述】:

我有一个用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)

【问题讨论】:

    标签: r plot geospatial igraph ggraph


    【解决方案1】:

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

    V(g)$x<-lo[,1]
    V(g)$y<-lo[,2]
    
    #plot
    ggraph(g)+
      geom_edge_link()+
      geom_node_point()
    

    【讨论】:

    • 谢谢@Mateo!这比我想象的要简单。关于如何将ggpraph 绘图与ggmap 结合起来的任何想法?
    • 没试过。我的方法是将图形连同计算出的感兴趣的度量一起转换为data.frame,并使用OpenStreetMap 库中的ggplot2autoplot。这是一个示例:graph plot。希望对你有帮助
    • 嘿,这非常有用,但你知道如何将真实坐标放在 x 和 y 轴上吗?因为我只是得到一个网络范围。
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多