![](/img/trans.png)
[英]Access nodes with edges to a certain node of interest in igraph python
[英]python igraph: nodes and edges color according to a number associated to the node
我是python和igraph的新手,所以问题可能很简单。
我有一个128个节点的网络和128个数字的数组,每个数字在0和1之间。数字代表节点的一个特征。
我想要两件事:
array[i] == array[j]
,节点i
和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个节点怎么办?)。 这里有人建议我
关于第二个问题,我试着在这里调整代码到我的案例,但我得到的最好的是两种不同的颜色(而且我不明白他们是如何“选择两个”)
我怎么解决这个问题?
我知道我问过两个问题,但我认为它们非常相关。 但是,如有必要,我可以编辑此帖子并创建一个新帖子。
提前致谢。
我在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]
我从邮件列表收到的完整答案就在这里 。
制作与每种差异相关的颜色字典。 目前尚不清楚您需要多少种颜色,但为每个差异指定颜色名称“红色”或颜色代码“#FFFFFF”。 例如,
coldict = {}
coldict[0] = "red"
因此,当您检查差异数组[i] - 数组[j] = 0时,它会指定红色。 对所有预期的差异执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.