![](/img/trans.png)
[英]Access nodes with edges to a certain node of interest in igraph python
[英]python igraph: nodes and edges color according to a number associated to the node
我是python和igraph的新手,所以問題可能很簡單。
我有一個128個節點的網絡和128個數字的數組,每個數字在0和1之間。數字代表節點的一個特征。
我想要兩件事:
array[i] == array[j]
,節點i
和j
的顏色必須相同 i
和j
之間的邊緣的顏色必須根據這個標准給出: if array[i]<=array[j] -> color_edge[ij] = color_node[i] else color_edge[ij] = color_node[j]
我嘗試了很多東西,我認為主要的問題是:
g.vs[i]["color"] = number
不起作用。我必須插入“red”或“HTML notation for color”字符串。 但是如何將我的數組的每個數字與一個字符串相關聯? g.es["color"]
為所有鏈接指定顏色。 但是g.es[i]["color"]
不起作用(這里g
是我的圖形,在g.es[i][".."]
, i
是邊緣的ID)。 關於第一個問題,我可以提出的唯一解決方案是手動為每個節點分配顏色
g.vs[0]["color"] = "red" . . . g.vs[127]["color"] = "blue"
然后檢查array
上的條件並最終改變兩個節點之一的顏色( g.vs[i]["color"] = g.vs[j]["color"]
)。 但這是一個巨大的時間損失,並不是一般的方法(如果網絡有10 ^ 6個節點怎么辦?)。 這里有人建議我
關於第二個問題,我試着在這里調整代碼到我的案例,但我得到的最好的是兩種不同的顏色(而且我不明白他們是如何“選擇兩個”)
我怎么解決這個問題?
我知道我問過兩個問題,但我認為它們非常相關。 但是,如有必要,我可以編輯此帖子並創建一個新帖子。
提前致謝。
我在igrpah郵件列表上問了這個問題。
要獲得相同顏色的節點i
和j
如果array[i] == array[j]
您可以這樣做:
id_gen = UniqueIdGenerator()
color_indices = [id_gen.add(value) for value in array]
palette = ClusterColoringPalette(len(id_gen))
colors = [palette[index] for index in color_indices]
graph.vs["color"] = colors
要獲得邊緣的顏色,可以通過問題中的標准來確定
for edge in graph.es:
u, v = edge.tuple
edge["color"] = colors[u if array[u] <= array[v] else v]
我從郵件列表收到的完整答案就在這里 。
制作與每種差異相關的顏色字典。 目前尚不清楚您需要多少種顏色,但為每個差異指定顏色名稱“紅色”或顏色代碼“#FFFFFF”。 例如,
coldict = {}
coldict[0] = "red"
因此,當您檢查差異數組[i] - 數組[j] = 0時,它會指定紅色。 對所有預期的差異執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.