代码之家  ›  专栏  ›  技术社区  ›  Ankit

多边R图

  •  0
  • Ankit  · 技术社区  · 7 年前

    Employee    address    Designation
    E1          A1         D1
    E2          A2         D2
    E3          A1         D3
    E4          A1         D1
    E5          A3         D1
    

    我需要在居住在同一地址且具有相同名称的员工之间创建关系,以便创建图形边缘(igraph)

    我使用了下面的代码来绘制员工和地址之间的关系,但是如何添加名称。

    library(igraph)
    g <- graph_from_adjacency_matrix(tcrossprod(table(data)) - diag(nrow(data)), mode = "undirected")
    plot(g)
    

    例如,E1、E4和E4通过地址关联,但它们也通过名称关联。因此,两条线将连接这两条线。一个是红色(表示地址),另一个是蓝色(表示名称)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Esther    7 年前

    当然,您可以更优雅地执行此操作,但其中一个选项可能是重塑数据,以便有两个边列表,然后将它们合并。

    library(igraph)
    
    data<-data.frame(Employee=paste0("E", c(1:5)),
                     Address=paste0("A", c(1:3,1,3)), 
                     Designation=paste0("D", c(1:3,2,3)))
    
    g1<-graph.adjacency(tcrossprod(table(data[,c(1,2)])), diag=FALSE, mode="undirected")
    
    el<-get.data.frame(g1)
    el$e_type<-"Address"
    
    g2<-graph.adjacency(tcrossprod(table(data[,c(1,3)])), diag=FALSE, mode="undirected")
    
    el2<-get.data.frame(g2)
    el2$e_type<-"Designation"
    
    el_all<-rbind(el, el2)
    
    final_g<-graph.edgelist(as.matrix(el_all[,1:2]))
    E(final_g)$type<-el_all[,3]
    
    E(final_g)$color<-ifelse(E(final_g)$type=="Address", "red", "blue")
    
    plot(final_g)
    

    enter image description here

    推荐文章