簡體   English   中英

python igraph:節點和邊緣顏色根據與節點關聯的數字

[英]python igraph: nodes and edges color according to a number associated to the node

我是python和igraph的新手,所以問題可能很簡單。

我有一個128個節點的網絡和128個數字的數組,每個數字在0和1之間。數字代表節點的一個特征。

我想要兩件事:

  • 如果array[i] == array[j] ,節點ij的顏色必須相同
  • ij之間的邊緣的顏色必須根據這個標准給出: 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郵件列表上問了這個問題。

要獲得相同顏色的節點ij如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM