gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:16:07 25 4
gpt4 key购买 nike

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

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

我想要两件事:

  • 节点的颜色ij如果 array[i] == array[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不起作用。我必须插入“红色”或“HTML 颜色表示法”类型的字符串。但是,我如何才能将数组中的每个数字关联到一个字符串?
  • 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 个节点怎么办?)。我在这个 here 中被建议

关于第二个问题,我尝试改编了here中的代码就我而言,但我得到的最好的是两种不同的颜色(而且我不明白它们是如何“选择的两种”)

我该如何解决这个问题?

附言我知道我问了两个问题,但我认为它们非常相关。但是,如有必要,我可以编辑此帖子并创建一个新帖子。

提前致谢。

最佳答案

我在 igrpah 邮件列表上问过这个问题。

如果 array[i] == array[j] 要获得相同颜色的节点 ij 你可以这样做:

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 .

关于 python igraph : nodes and edges color according to a number associated to the node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44086944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com