【问题标题】:Access attributes of a Multigraph in NetworkXNetworkX 中多图的访问属性
【发布时间】:2016-10-01 02:37:11
【问题描述】:

我正在使用来自这个问题的代码: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'

如果我只使用图表,则此代码有效,但在使用多重图表时会出现错误。如果您需要任何进一步的说明,请告诉我。谢谢。

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    将导致错误的行更改为

    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 上有所记录。

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 2012-11-21
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      相关资源
      最近更新 更多