我已经创建了一个有向图并通过一个程序找出它包含的所有循环。创建图之后,我想改变包含循环中涉及的顶点的边的颜色。我可以在IGraph-Python中更改包含特定顶点的边的颜色
我正在使用python igraph。
请帮助
我已经创建了一个有向图并通过一个程序找出它包含的所有循环。创建图之后,我想改变包含循环中涉及的顶点的边的颜色。我可以在IGraph-Python中更改包含特定顶点的边的颜色
我正在使用python igraph。
请帮助
事情是这样的:
vertex_set = set(vertices_in_cycle)
g.es["color"] = "black"
red_edges = g.es.select(_source_in=vertex_set, _target_in=vertex_set)
red_edges["color"] = "red"
说明:
g.es
代表了集图中的所有边。 (同样,g.vs
是所有顶点的集合)。
g.es["color"]
让你指定一个值的所有图中的边缘color
属性。绘图仪使用此边缘属性来确定边缘应具有的颜色。因此,在第2行中,您将所有边的颜色设置为黑色。 (注意:你也可以在这里使用一个列表而不是简单的字符串,或者你可以使用HTML颜色符号来表示自定义颜色)。
您可以使用g.es
作为列表,在这种情况下,您会得到图的特定边;例如g.es[2]
会给你id = 2的优势。这里没有用到这个,但是很高兴知道。
g.es.select
是一种基于某些标准选择边缘子集的方法。 help(EdgeSeq.select)
为您提供更多信息;这里要指出的是,在第3行中,您选择了两个端点位于您感兴趣的顶点集合中的所有边缘。所选边缘存储在与g.es
(即EdgeSeq
)类型相同的red_edges
变量中, 。
在最后一排,你在red_edges
设置所有边缘的颜色red
,覆盖黑色您已经于行上设置2
注意上面的代码将不会画画只有周期的边缘变成红色,但也包括周期的所有和弦。
更新:如果在上面的代码行3不为你工作,出于某种原因,你可以代替线2和3如下:
g.es["color"] = ["red" if (edge.source in vertex_set and \
edge.target in vertex_set) else "black" \
for edge in g.es]
当我试图实现上述代码的错误提出 AttributeError:'Graph'对象没有'source'属性 – Fyre 2012-04-09 13:04:57
您可能会编写'source_in'和'target_in'而不是'_source_in'和'_target_in'(注意前导下划线)。然而,如果你告诉我上面的哪个命令给你这个错误,这将是有益的。 – 2012-04-09 18:58:30
是的,我已经使用了领先的下划线,但我仍然得到相同的错误 – Fyre 2012-04-09 22:04:26