在NetworkX中访问Multigraph的属性

时间:2016-06-01 15:56:20

标签: python networkx

我正在使用这个问题的代码:networkx - change color/width according to edge attributes - inconsistent result因为它几乎回答了我的问题,但我正在使用Multigraph,这就是为什么这个问题的答案对我没有帮助。

我需要根据权重绘制线条粗细的图形,但图形绘制不正确。我确定问题是由于边缘的顺序。这是我的代码:

我有一个多边形图,它由边缘组成,如下所示:

edgies = [(1,2, {'color': 'r'}),(2,3,{'color': 'b'}),(3,4,{'color':'g'})]

G = nx.MultiGraph()

G.add_edges_from(edgies, color = 'color')

pos = nx.circular_layout(G)

edges = G.edges()
colors = [G[u][v]['color'] for u,v in edges]

nx.draw(G, pos, edges=edges, edge_color=colors)
plt.show()

我得到的错误如下:

colors = [G[u][v]['color'] for u,v in edges]
KeyError: 'color'

如果我只使用图形但在处理多图形时出错,则此代码有效。如果您需要进一步说明,请与我们联系。谢谢。

1 个答案:

答案 0 :(得分:2)

将导致错误的行更改为

colors = [print(G[u][v]) for u,v in edges]

我们可以看到您实际看到的是:

{0: {'color': 'r'}}
{0: {'color': 'b'}}
{0: {'color': 'g'}}

我假设networkx正在存储它所在的图形作为密钥,因此您只需要首先访问密钥[0],如下所示:

colors = [G[u][v][0]["color"] for u,v in edges]

此访问模式在边缘部分的https://networkx.github.io/documentation/networkx-1.9.1/reference/classes.multigraph.html中有所记录。