微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

网络中的颜色集群成员

如何解决网络中的颜色集群成员

我想使用 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")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。