网络中的颜色集群成员

Color cluster members in a network

我想使用 membership() 作为调色板索引,根据网络节点所属的节点为其着色。 我在 igraph 对象的子集上计算集群。我希望只为子图的元素着色,其余部分为灰色。

我找到了一种手动为小型网络执行此操作的方法,但找不到自动执行此操作的方法。

如果我使用讨论的方法 here,它会中断。

library("igraph")
library("igraphdata")

data(karate)
V(karate)$name <- gsub("ctor ","",V(karate)$name)

karate_1 <- induced.subgraph(karate, vids=which(graph.coreness(karate) > 2))
clu <- cluster_louvain(karate_1)
membership(clu)
V(karate)$color <- ifelse(V(karate)$name %in% c("Mr Hi","A2","A3","A4","A8","A14","A20"), "green",
                          ifelse(V(karate)$name %in% c("A5","A6","A7","A11"), "red",
                                 ifelse(V(karate)$name %in% c("A9","A24","A25","A26","A28","A29","A30","A31","A32","A33","John A"), "blue","grey50")))

plot(karate, mark.groups=communities(clu), vertex.label=NA,edge.color = "grey50")

尝试以下操作。为了使代码更清晰,我创建了一个颜色矢量,但这并不是绝对必要的。

  1. 创建存在于 membership(clu) 中的顶点名称的逻辑索引;
  2. 为所有顶点分配默认颜色"grey50"
  3. 使用逻辑索引和成员编号将簇颜色分配给它们各自的顶点。

并绘制图表。

clrs <- c("red", "green", "blue")
i <- V(karate)$name %in% names(membership(clu))
V(karate)$color <- "grey50"
V(karate)$color[i] <- clrs[membership(clu)]
plot(karate, mark.groups=communities(clu), vertex.label=NA,edge.color = "grey50")