我正在使用 igraph 进行一些边缘着色。我设法完成了绘图教程,并且确实了解了如何进行顶点着色,现在我在为边缘而苦苦挣扎。
到目前为止,我有一个矩阵 M(你可以认为它是经典的列表/np 列表/任何东西),其中的整数对应于一种颜色。 0 表示没有边缘。例如:
M= [[0.0, 1, 2, 3], [1, 0.0, 3, 2], [2, 3, 0.0, 1], [3, 2, 1, 0.0]]
我发现了这个:Plot edge labels or similar with Igraph for Python 将矩阵转换为 igraph Graph,它确实有效。现在我想我必须告诉 igraph 为每条边分配哪种颜色,但我没有得到它。
我所做的是将前一个矩阵转换为列表 L 并删除了 0.0。然后我试着复制教程并写了这个:
gKn.es["color_assigned"] = L #gKn is the name of my graph; L is the processed list
visual_style={}
color_dict = {"1.0": "b", "2.0": "r", "3.0": "g"}
visual_style["edge_color"] = [color_dict[col_num] for col_num in gKn.es["color_assigned"]]
igraph.plot(gKn, **visual_style)
然后:
File "XXX/IG_edgeCol_square_graph.py", line 107, in <listcomp>
visual_style["edge_color"] = [color_dict[col_num] for col_num in gKn.es["color_assigned"]] KeyError: 1.0
这不是什么大惊喜,因为我几乎是随机做的。那么我如何才能做到这一点以及这个边缘事物是如何工作的?
Ps:我遵循的绘图教程:https://igraph.org/python/doc/tutorial/tutorial.html
编辑: 我做了一些不同的事情,它似乎工作得很好。这是我写的:
gKn = igraph.Graph(n)
TMP = []
for i in range(n):
for j in range(i):
gKn.add_edge(i,j)
TMP.append(M[i][j])
gKn.es["color_assigned"] = TMP
color_dict = {"1" : 'red', "2": 'blue', "3": 'green'}
igraph.plot(gKn, edge_color = [color_dict[str(int(col_num))] for col_num in gKn.es["color_assigned"]])
我认为我遇到的问题是我没有(或者至少我不知道)对边缘索引的控制。在这里,我确切地知道它们的顺序,所以我可以毫无问题地执行 gKn.es["color_assigned"] 行。