3

如何绘制选择的 igraph 节点?

我有一个现有的图表,但它太复杂了。我希望能够“放大”节点的子集。

我能够删除边的子集,但我不知道如何“关闭”隔离节点。

使用网络包时, displayisolates=FALSE参数做到这一点;它不显示这些孤立的节点。

布局算法也应该忽略“关闭”的边缘。

例如:

g1 <- graph( c( 0,1, 1,2, 2,2, 2,3 ) )
g2 <- delete.edges(g1, E(g1, c(0,1)))
plot(g2)

绘制 g2 时,我不想显示节点 0。

谢谢

4

3 回答 3

7

我知道用户不应该提交新的答案来评论其他答案,但我的编辑被拒绝了,我没有足够高的声誉来发表评论。

我只是想指出,在 Wine 的上述回答中,从 igraph 0.6 开始, deletes.isolates 函数中的“- 1”索引更正不是必需的。另请参阅 Tamas 的评论:

仅绘制具有特定权重的边 - igraph

于 2013-03-08T18:56:54.680 回答
4

嘿,看起来你已经明白了,但是在探索这个问题时(我通常自己使用网络包,但也尝试在某些事情上使用 igraph)我想出了一个应该自动执行此操作的函数,镜像显示隔离 = F 功能。

delete.isolates <- function(graph, mode = 'all') {
  isolates <- which(degree(graph, mode = mode) == 0) - 1
  delete.vertices(graph, isolates)
}

在您的情况下,如果您使用参数 mode = 'in',则使用 g1 运行它会删除第一个顶点,如果您使用参数 mode = 'out',则会删除最后一个顶点。

所以在你的情况下,如果你输入:

g2 <- delete.isolates(g1, mode = 'in')
plot(g2)

你应该得到你想要的。我不怎么使用 igraph,所以这个函数很可能会遇到其他图表的一些问题。

PS 这也给出了一种奇怪的结果,在新的 g2 中,第一个顶点现在是基于入度的隔离。此功能在大多数情况下可能没有用,但可能有助于绘制更清晰的图。

于 2011-04-14T18:21:27.480 回答
1
iso <- V(g1)[degree(g1)==0]
g2 <- delete.vertices(g1, iso)
于 2017-03-28T21:26:50.177 回答