问题描述
我想绘制自己定义的图簇。我正在使用简化的无向安然数据。
library(igraphdata)
data("enron")
g <- as.undirected(enron)
g <- simplify(g)
rm("enron")
member <- c(1,8,9,10,7,4,1,2,6,3,5,7)
我尝试了很多方法,但是看起来都不好。我能做的最好的是
edges_data_frame <- get.data.frame(g,what = "edges")
w.mem <- rep(0,length(E(g)))
for (i in 1:length(E(g))){
w.mem[i] <- ifelse(member[edges_data_frame$from[i]] == member[edges_data_frame$to[i]],500,1)
}
mem <- make_clusters(g,member)
E(g)$weight <- w.mem
colors <- rainbow(max(membership(mem)))
layout <- layout.fruchterman.reingold(g,weights=w.mem)
set.seed(1234)
plot(g,vertex.color=colors[mem$membership],mark.groups=communities(mem),vertex.label = NA,edge.width = 1,edge.color = "lightgray",vertex.size = 5)
我发现“删除边缘图”看起来更干净
coGrph <- delete_edges(g,E(g)[crossing(mem,g)])
col_vector <- c('#e6194b','#3cb44b','#ffe119','#4363d8','#f58231','#911eb4','#46f0f0','#f032e6','#bcf60c','#fabebe','#008080','#e6beff','#9a6324','#fffac8','#800000','#aaffc3','#808000','#ffd8b1','#000075','#808080','#ffffff','#000000')
temp <- sapply(1:length(V(g)),FUN = function(i) {col_vector[member[i]]})
V(coGrph)$color <- temp
plot(coGrph,vertex.size = 5)
但是,该图有一些缺失的边缘,不能反映图的真实连接。我想使用此图并将删除的边添加回图,而无需更改我现在的位置。有可能吗?
非常感谢您的帮助。