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

如何将边线添加到现有绘图中?

如何解决如何将边线添加到现有绘图中?

我想绘制自己定义的图簇。我正在使用简化的无向安然数据。

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)

my first trial

我发现“删除边缘图”看起来更干净

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)

my second trial

但是,该图有一些缺失的边缘,不能反映图的真实连接。我想使用此图并将删除的边添加回图,而无需更改我现在的位置。有可能吗?

非常感谢您的帮助。

解决方法

是的。使用coGrph创建布局,然后绘制原始图形。

继续您的“第二次审判”

set.seed(1234)
LOcG = layout_nicely(coGrph)

V(g)$color <- temp
plot(g,layout=LOcG,vertex.label = NA,vertex.size = 5)

Graph with all edges.

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