如何解决如何将边线添加到现有绘图中?
我想绘制自己定义的图簇。我正在使用简化的无向安然数据。
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)
但是,该图有一些缺失的边缘,不能反映图的真实连接。我想使用此图并将删除的边添加回图,而无需更改我现在的位置。有可能吗?
非常感谢您的帮助。
解决方法
是的。使用coGrph创建布局,然后绘制原始图形。
继续您的“第二次审判”
set.seed(1234)
LOcG = layout_nicely(coGrph)
V(g)$color <- temp
plot(g,layout=LOcG,vertex.label = NA,vertex.size = 5)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。