我正在使用这个问题的代码: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'
如果我只使用图形但在处理多图形时出错,则此代码有效。如果您需要进一步说明,请与我们联系。谢谢。
答案 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中有所记录。