2

我创建了一个有向图,并通过一个程序找出它包含的所有循环。创建图形后,我想更改包含循环中涉及的顶点的边的颜色。

我正在使用python igraph。

请帮忙

4

1 回答 1

4

像这样的东西:

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"

解释:

  1. g.es表示图中所有边的集合。(同样,g.vs是所有顶点的集合)。

  2. g.es["color"]允许您为图中所有边的color属性分配一个值。绘图仪使用此边缘属性来确定边缘应具有的颜色。因此,在第 2 行中,您将所有边缘的颜色设置为黑色。(注意:您也可以在此处使用列表而不是简单的字符串,或者您可以使用 HTML 颜色符号来自定义颜色)。

  3. 您可以将g.es其用作列表,在这种情况下,您将获得图形的特定边;例如,g.es[2]会给你 id=2 的优势。这在这里没有使用,但很高兴知道。

  4. g.es.select是一种根据某些标准选择边缘子集的方法。help(EdgeSeq.select)为您提供有关此的更多信息;这里的要点是,在第 3 行中,您正在选择所有边,其两个端点都位于您感兴趣的顶点集中。所选边存储在变量中,该变量与(ie )red_edges具有相同的类型。g.esEdgeSeq

  5. 在最后一行中,您将所有边缘的颜色设置red_edgesred,覆盖您在第 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]
于 2012-04-09T10:03:18.527 回答