R:绘制igraph时有选择地显示节点

时间:2011-04-13 00:02:18

标签: r graph igraph

如何绘制选定的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。

由于

3 个答案:

答案 0 :(得分:7)

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

我只是想指出,在上面的Wine的答案中,从igraph 0.6开始,并不需要在deletes.isolates函数中进行“-1”索引校正。另见Tamas的评论:

Plot only Edges with a specific weight - igraph

答案 1 :(得分:3)

嘿,看起来你已经明白了,但是在探索这个问题时(我通常自己使用网络包,但是也尝试过使用igraph),我想出了一个应该自动执行的功能,镜像displayisolates = 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,所以很有可能这个函数会遇到其他图形的一些问题。

P.S。这也给出了一种奇怪的结果,即在新的g2中,第一个顶点现在是基于indegree的隔离。在大多数情况下,此功能可能没用,但可能有助于制作更清晰的情节。

答案 2 :(得分:1)

iso <- V(g1)[degree(g1)==0]
g2 <- delete.vertices(g1, iso)