我创建了一个有向图,并通过一个程序找出它包含的所有循环。创建图形后,我想更改包含循环中涉及的顶点的边的颜色。
我正在使用 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
的属性all图中的边。绘图仪使用此边缘属性来决定边缘应具有什么颜色。因此,在第 2 行中,您将所有边缘的颜色设置为黑色。 (注意:您还可以在此处使用列表而不是简单的字符串,或者您可以使用 HTML 颜色表示法来自定义颜色)。
你可以使用g.es
作为列表,在这种情况下,您可以获得图表的特定边;例如。,g.es[2]
会给你 id=2 的优势。这里没有使用它,但了解一下还是有好处的。
g.es.select
是一种根据某些标准选择边缘子集的方法。help(EdgeSeq.select)
为您提供更多相关信息;这里的要点是,在第 3 行中,您正在选择两个端点都位于您感兴趣的顶点集中的所有边。选定的边存储在red_edges
变量,其类型与g.es
(i.e. EdgeSeq
).
在最后一行中,您将设置所有边缘的颜色red_edges
to red
,覆盖您在第 2 行中设置的黑色。
请注意,上面的代码不仅会将循环的边缘绘制为红色,还会将循环的所有和弦绘制为红色。
Update:如果上述代码中的第 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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)