使用 subgraph() 并使用 igraph python 保留顶点属性
Using subgraph() and preserving vertex attributes with igraph python
我想将断开连接的图分成块(使用 community_spinglass)。但是,一旦我得到子图并使用 community_spinglass() ,原始图中顶点的标签就会丢失。我正在处理 40 多个顶点,因此追踪它们并不容易。这是我的问题 "toy example":
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 列表的顺序排列,而不是它们之前的 label.Furthermore:
comm = Block1.community_spinglass()
for c in comm:
print c
[2, 3, 4]
[0, 1]
我们得到了子图的索引,但是很难关联到原始图的索引。
有没有办法根据原始图的索引或标签获取社区?
提前致谢。
使用Block1.vs[c]["name"]
获取Block1
内社区c
中的节点名称。说明:
Block1.vs
是整个Block1
图的顶点序列。
Block1.vs[c]
将此顶点序列子集化为仅索引在名为 c
的可迭代对象中的节点,这就是您的 for 循环中的情况。
Block1.vs[c]["name"]
检索您在上一步中选择的顶点的 name
顶点属性。由于名称保留在子图中,这应该允许您将 Block1
的节点与原始图形相关联。
我想将断开连接的图分成块(使用 community_spinglass)。但是,一旦我得到子图并使用 community_spinglass() ,原始图中顶点的标签就会丢失。我正在处理 40 多个顶点,因此追踪它们并不容易。这是我的问题 "toy example":
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 列表的顺序排列,而不是它们之前的 label.Furthermore:
comm = Block1.community_spinglass()
for c in comm:
print c
[2, 3, 4]
[0, 1]
我们得到了子图的索引,但是很难关联到原始图的索引。
有没有办法根据原始图的索引或标签获取社区?
提前致谢。
使用Block1.vs[c]["name"]
获取Block1
内社区c
中的节点名称。说明:
Block1.vs
是整个Block1
图的顶点序列。Block1.vs[c]
将此顶点序列子集化为仅索引在名为c
的可迭代对象中的节点,这就是您的 for 循环中的情况。Block1.vs[c]["name"]
检索您在上一步中选择的顶点的name
顶点属性。由于名称保留在子图中,这应该允许您将Block1
的节点与原始图形相关联。