繁体   English   中英

使用subgraph()并通过igraph python保留顶点属性

[英]Using subgraph() and preserving vertex attributes with igraph python

我想将断开连接的图划分为块(以使用community_spinglass)。 但是,一旦获得子图并使用community_spinglass(),原始图中顶点的标签就会丢失。 我正在处理40多个顶点,因此要追踪它们并不容易。 这是我的问题的“玩具示例”:

import igraph
from igraph import Graph
g4_matrix = [ [0,0,-1,0,0,0,0], [0,0,0,0.8,0.2,0,0], [-1,0,0,0,0,0,0], [0,0.8,0,0,1,0,0.1], [0,0.2,0,1,0,-0.3,-.7], [0,0,0,0,-0.3,0,1], [0,0,0,0.1,-0.7,1,0] ]
v_name = ["1", "2", "3", "4", "5", "6", "7"]
g4 = Graph.Weighted_Adjacency(g4_matrix, mode = 'undirected',attr = 'weight' )
igraph.plot(g4,bbox = (300, 300),vertex_label = v_name)

带标签的原始图形

获得街区和社区后:

g4_blocks = g4.blocks()
g4_block = g4.vs.select(g4_blocks[1])
Block1 = g4.subgraph(g4_block)
igraph.plot(Block1, bbox = (200, 200), vertex_label = v_name)

子图,如观察到的那样,顶点按顺序跟随v_name列表,并且不保留过去的标签

但是我们看到顶点按顺序跟随v_name列表,而不是它们的先前标签。此外,当我们获得社区时:

comm = Block1.community_spinglass()
for c in comm:
    print c

[2, 3, 4]
[0, 1]

我们得到了子图的索引,但是很难与原始图的索引联系起来。

有没有一种方法可以获取引用原始图的索引或标签的社区?

提前致谢。

使用Block1.vs[c]["name"]获取Block1中社区c中的节点名称。 说明:

  1. Block1.vs是整个Block1图的顶点序列。

  2. Block1.vs[c]将此顶点序列子集仅包含其索引在可迭代的名为c的节点中,在for循环中就是这种情况。

  3. Block1.vs[c]["name"]检索在上一步中选择的顶点的name顶点属性。 由于名称保留在子图中,因此应该可以使Block1的节点与原始图相关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM