【问题标题】:How can I add edges into an existing plot?如何将边添加到现有绘图中?
【发布时间】:2021-02-13 12:55:05
【问题描述】:

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

library(igraphdata)
data("enron")
g <- as.undirected(enron)
g <- simplify(g)
rm("enron")

member <- c(1,  8,  9,  9, 10, 10,  8,  7,  4,  1,  2,  6,  3,  1,  2,  8,  7,  2,  1,  5,  
            1,  7,  6,  4,  8,  4,  8, 10, 3,  6,  1,  4,  7,  4,  3,  7,  9, 10,  3,  8,  1,
            9,  8,  2,  7,  2,  9,  5,  1,  2,  6, 10,  3,  3, 2,  1,  9, 10,  3,  5,  6,  5,
            5,  3,  7,  6,  9, 10,  8, 10,  8,  8, 10, 10, 10,  8,  7,  7,  9,  1,  9, 2,  9,
            7,  2,  7,  7,  3,  2,  5,  2,  1,  6,  5, 10,  4,  3,  2,  4,  6,  4,  9,  5,  4,
            1, 10,  2,  3, 4,  3,  6,  3,  6,  4,  6,  8,  2,  4,  5,  1,  5,  1,  4, 10,  4,  7,
            5,  9, 10,  1,  2,  1,  5,  7,  5, 3,  5,  8, 7,  9,  5,  8,  1,  5,  3,  3,  3, 10,  
            1,  7,  8,  4,  1, 10,  9,  6,  9,  9,  4,  2,  6,  4, 6,  3,  5,  6,  9,  7,  6,  6,  
            4,  8,  6,  8,  8,  2,  5,  4,  3,  2,  9, 10,  2,  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.label = NA, vertex.size = 5)

my second trial

但是,这个情节有一些缺失的边缘,并不能反映情节的真实联系。我想使用这个图并将删除的边缘添加回图而不改变我现在的位置。有可能吗?

非常感谢您的帮助。

【问题讨论】:

    标签: r networking plot cluster-analysis igraph


    【解决方案1】:

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

    继续你的“第二次试验”

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

    【讨论】:

    • 非常感谢!我太笨了!
    • 非常抱歉,我是新用户,我真的不知道如何接受这个答案...
    • 是的,我检查了复选标记。当我看到它时,我实际上赞成你的回答,但他们说我的声望不到 15,所以他们不会显示我的投票。真的很抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2017-10-19
    • 2020-02-17
    • 2015-12-16
    • 2012-10-27
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多