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 行目で、関心のある頂点セットに両方の端点があるすべてのエッジを選択していることです。選択されたエッジは変数に格納され、変数は(つまり)red_edgesと同じ型です。g.esEdgeSeq

  5. 最後の行では、すべてのエッジの色を に設定して、2 行目で設定した黒色red_edgesred上書きしています。

上記のコードは、サイクルのエッジだけでなく、サイクルのすべてのコードも赤くペイントすることに注意してください。

更新: 上記のコードの 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 に答える