python igraph:节点和边的颜色根据与节点关联的数字

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

我是 python 和 igraph 的新手,所以这个问题可能真的很简单。

我有一个包含 128 个节点和 128 个数字数组的网络,每个数字都在 0 和 1 之间。数字代表节点的一个特征。

我想要两件事:

我尝试了很多东西,我认为主要问题是:

关于第一个问题,我能提出的唯一解决方案是手动为每个节点分配一种颜色,如

g.vs[0]["color"] = "red" . . . g.vs[127]["color"] = "blue"

然后检查 array 上的条件并最终更改两个节点之一 (g.vs[i]["color"] = g.vs[j]["color"]) 的颜色。但这是一个巨大的时间损失,并且不是通用的方法(如果网络有 10^6 个节点怎么办?)。我被建议在这个 here

关于第二个问题,我尝试根据我的情况调整 here 中的代码,但我得到的最好的是两种不同的颜色(而且我不明白它们是如何 "the choosen two" )

我该如何解决这个问题?

P.s。我知道我问了两个问题,但我认为它们非常相关。但是,如有必要,我可以编辑此 post 并创建一个新的。

提前致谢。

制作一个与每个差异相关的颜色字典。不清楚您需要多少种颜色,但请为每个差异分配一个颜色名称 "red" 或颜色代码“#FFFFFF”。例如,

coldict = {}
coldict[0] = "red"

因此,当您检查数组[i] - 数组[j] = 0 的差异时,它会分配红色。对所有预期的差异执行此操作。

我在 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]

我从邮件列表收到的完整答复是here