python igraph:节点和边根据与节点关联的数字着色
我对python和igraph非常陌生,所以这个问题可能非常简单 我有一个128个节点的网络和一个128个数字的数组,每个数字在0到1之间。数字表示节点的一个特征 我想要两件事:python igraph:节点和边根据与节点关联的数字着色,python,igraph,Python,Igraph,我对python和igraph非常陌生,所以这个问题可能非常简单 我有一个128个节点的网络和一个128个数字的数组,每个数字在0到1之间。数字表示节点的一个特征 我想要两件事: 如果array[i]==array[j] 必须根据以下标准给出i和j之间边缘的颜色: 如果数组[i]颜色\u边[ij]=颜色\u节点[i] else color_edge[ij]=color_node[j] 我尝试了很多东西,我认为主要的问题是: g.vs[i][“color”]=number不起作用。我必须插入
- 如果
array[i]==array[j]
- 必须根据以下标准给出
和i
之间边缘的颜色:j
如果数组[i]颜色\u边[ij]=颜色\u节点[i] else color_edge[ij]=color_node[j]
不起作用。我必须插入一个类型为“red”或“HTML notation for color”的字符串。但是如何将数组中的每个数字与字符串相关联g.vs[i][“color”]=number
为所有链接提供颜色。但是g.es[“color”]
不起作用(这里g.es[i][“color”]
是我的图形,在g
,g.es[i][“.”“]
是边的ID)i
g.vs[0][“颜色”]=“红色”
.
.
.
g、 vs[127][“颜色”]=“蓝色”
然后检查array
上的条件,并最终更改两个节点之一的颜色(g.vs[i][“color”]=g.vs[j][“color”]
)。但是这是一个巨大的时间损失,而且不是一个通用的方法(如果网络有10^6个节点怎么办?)。有人建议我这样做
关于第二个问题,我试图使代码适应我的情况,但我得到的最好结果是两种不同的颜色(而且我不明白它们是如何“选择的两种颜色”)
我怎样才能解决这个问题
我知道我问了两个问题,但我认为它们非常相关。但是,如果有必要,我可以编辑这篇文章并创建一个新的
提前感谢。制作一本与每个差异相关的颜色词典。不清楚您需要多少颜色,但为每个差异指定颜色名称“红色”或颜色代码“#FFFFFF”。比如说,
coldict = {}
coldict[0] = "red"
因此,当您检查差分数组[i]-array[j]=0时,它会指定红色。对所有预期的差异执行此操作 我在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]
用于graph.es中的边:
u、 v=edge.tuple
边[“颜色”]=颜色[u]如果数组[u]我需要128种颜色。但如果我有一个更大的网络,我需要更多。一般来说,我需要每个节点一种颜色。这种方法与我链接的方法非常相似,并且存在一个问题,即我必须手动为每个差异分配一种颜色。假设节点的数量大约为10^5或更多。你会同意我的看法,即这种方法是可行的不可行…@Ludwik你能关闭这个问题并将这个答案标记为问题的解决方案吗?我没有这种能力,但是如果答案仅仅由外部链接组成,那么StackOverflow是不受欢迎的。目标页面随时可能消失。你应该总结解决方案并将链接作为源。