如何在NetworkX中为MultiGraph绘制边缘标签?

时间:2015-10-02 10:29:45

标签: python matplotlib networkx

在MultiGraph中,边缘由 (u, v, key) 键入,例如('n1', 'n2', 'key1')。我想使用(u, v, key): 10为MultiGraph绘制边缘标签(比如重量,draw_networkx_edge_labels)。

但是,边缘标签由(u, v)中的双元组draw_networkx_edge_labels键入,而不是MultiGraph中的 3元组 (u,v,key),导致{{1 }}

PS:ValueError: too many values to unpack中的参数edge_labels描述如下:

draw_networkx_edge_labels
  

字典中的边标签由文字标签的边缘二元组键控   (缺省值=无)。仅绘制字典中键的标签。

1 个答案:

答案 0 :(得分:1)

我甚至无法找到如何使用matplotlib绘制多图(因为多边不会显示)。但是,如果导出到点,则可以看到多个边,并且可以在边上用标签属性标记它们。

#!/usr/bin/env python
import networkx as nx

G = nx.MultiGraph()
G.add_node('A')
G.add_node('B')
G.add_edge('A','B', label='foo')
G.add_edge('A','B', label='bar')

nx.write_dot(G,'multi.dot')

multigraph with edge labels

请注意,如果查看nx_pylab.py,draw_networkx_edge_labels的默认行为是使用dict(((u, v), d) for u, v, d in G.edges(data=True))作为edge_labels属性,因为dictionnary键必须是唯一的,因此多图会失败。因此,如果您想使用matplotlib进行绘图,则可能需要修改draw_networkx_edge_labels方法。