【问题标题】:Is there a way to colour code directionality in an igraph?有没有办法在 igraph 中对方向性进行颜色编码?
【发布时间】:2019-07-18 13:51:15
【问题描述】:

我有一些数据可以显示人们之间的 Twitter 联系(即在他们的推文中标记其他用户的人),并且想绘制出人们之间的联系。在某些情况下,这种关系是互惠的,因为两个人都给对方加了标签,而有些人被加了标签但没有发推文。

在下面的示例中,人员 A 标记了人员 B 和人员 C,而人员 C 仅标记了人员 B。箭头是从人员 A -> 人员 C 和从人员 C -> 人员 B 的单向箭头,但在两者之间是双向的人 A 人 B。是否可以使这些箭头具有不同的颜色?

library(igraph)

df <- data.frame (from = c("Person A", "Person A", "Person B", "Person C"),
              to = c ("Person B", "Person C", "Person A", "Person B"),
              weight = c (1, 3, 4, 5)
              )

g_1 <- graph.data.frame(df, 
                    directed = TRUE) 

set.seed(123)
plot (g_1,
  edge.width = E(g_1)$weight)

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    可以选择E的边缘颜色指定color参数,并且可以通过is.mutual()函数找到倒数边缘:

    E(g_1)$color <- "grey50"
    E(g_1)$color[is.mutual(g_1)] = "red"
    plot(g_1, edge.width = E(g_1)$weight)
    

    【讨论】:

      【解决方案2】:

      您可以使用duplicated() 函数为双向边缘着色(取自R reciprocal edges in igraph in R 并修改为着色而不是弯曲):

      E(g_1)[duplicated(E) | duplicated(E,fromLast =TRUE)]$color <- "red"
      

      完整示例:

      library(igraph)
      
      df <- data.frame (from = c("Person A", "Person A", "Person B", "Person C"),
                        to = c ("Person B", "Person C", "Person A", "Person B"),
                        weight = c (1, 3, 4, 5)
      )
      
      g_1 <- graph.data.frame(df, 
                              directed = TRUE) 
      
      set.seed(123)
      
      E <- t(apply(get.edgelist(g_1),1,sort))
      E(g_1)$color <- "grey50"
      E(g_1)[duplicated(E) | duplicated(E,fromLast =TRUE)]$color <- "red"
      
      plot (g_1, edge.width = E(g_1)$weight)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        相关资源
        最近更新 更多