【问题标题】:How do you removing a vertex from igraph without changing the plotting locations如何在不更改绘图位置的情况下从 igraph 中删除顶点
【发布时间】:2023-11-04 20:35:01
【问题描述】:

我有一个包含 100 个顶点的图 g,我想从该图中删除一些顶点以获得 g1,但是当我这样做时,我希望保留 g 中每个顶点的位置。可以这样做吗?

par(mfrow=c(1,2))
g <- erdos.renyi.game(100, 1/100)
comps <- clusters(g)$membership
colbar <- rainbow(max(comps)+1)
V(g)$color <- colbar[comps+1]
V(g)$size<-seq(0.05,5,0.05)
plot(g, layout=layout.fruchterman.reingold, vertex.label=NA)

g1<-g - c("1","2","7","10")
plot(g1, layout=layout.fruchterman.reingold, vertex.label=NA)

我想到了一个解决方法,就是让我将不再想看到的顶点和边缘涂成白色,但在开始这条路线之前,我想知道是否有一些不那么重要的东西破解。

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    您可以从绘图中保存布局位置g

    locs <- layout.fruchterman.reingold(g)
    plot(g, layout=locs, vertex.label=NA)
    

    然后您可以在绘制g1 时重新使用它们,删除已删除节点的位置:

    g1<-g - c("1","2","7","10")
    plot(g1, layout=locs[-c(1, 2, 7, 10),], vertex.label=NA)
    

    【讨论】:

    • 哇!谢谢,太好了。
    【解决方案2】:

    您可以将位置存储为顶点属性xy,删除顶点后它们将继续存在。

    locs <- layout_with_fr(g)
    V(g)$x <- locs[, 1]
    V(g)$y <- locs[, 2]
    g1 <- delete_vertices(g, c(1, 2, 7, 10))
    plot(g1, vertex.label=NA)
    

    如您所见,绘图时也不再需要 layout 参数。

    【讨论】:

      最近更新 更多