如何在不更改绘图位置的情况下从 igraph 中删除顶点

How do you removing a vertex from igraph without changing the plotting locations

我有一个包含 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)

我想到的解决方法是将我不想再看到的顶点和边涂成白色,但在开始这条路线之前,我想知道是否有一些东西可以减少的黑客。

您可以通过绘图保存布局位置 g:

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

然后你可以在绘图时re-use它们g1,删除已删除节点的位置:

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

您可以将位置存储为顶点属性 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 参数。