我已經創建了一個有向圖並通過一個程序找出它包含的所有循環。創建圖之後,我想改變包含循環中涉及的頂點的邊的顏色。我可以在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