我是python和igraph的新手,所以问题可能很简单。
我有一个包含128个节点的网络和一个128个数字的数组,每个数字在0和1之间。数字代表节点的一个特征。
我想要两件事:
i
j
和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
不起作用。我必须插入“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个节点怎么办?)。我在这个here
关于第二个问题,我尝试将here中的代码改编为我的案例,但我获得的最好的是两种不同的颜色(而且我不明白他们是如何“选择两个”)< / p>
我该如何解决这个问题?
P.S。我知道我问了两个问题,但我认为它们非常相关。但是,如果有必要,我可以编辑此帖子并创建一个新帖子。
提前致谢。
答案 0 :(得分:2)
我在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]
我从邮件列表中收到的完整答案是here。
答案 1 :(得分:0)
制作与每种差异相关的颜色词典。不清楚你需要多少种颜色,但要指定一个颜色名称&#34;红色&#34;或颜色代码&#34; #FFFFFF&#34;每个差异。例如,
coldict = {}
coldict[0] = "red"
因此当你检查差异数组[i] - 数组[j] = 0时,它会指定红色。对所有预期的差异执行此操作。