python中Igraph图的边缘着色

时间:2021-07-02 13:10:28

标签: python graph igraph

我正在使用 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"] 行。

0 个答案:

没有答案