如何在 NetworkX 中为 MultiGraph 绘制边标签?
How do I draw edge labels for MultiGraph in NetworkX?
在class networkx.MultiGraph
, an edge is keyed by (u, v, key)
, for instance, ('n1', 'n2', 'key1')
. I would like to draw edge labels (say weight, (u, v, key): 10
) for MultiGraph
by using the function networkx.draw_networkx_edge_labels
.
但是,边缘标签由 draw_networkx_edge_labels
中的二元组 (u, v)
键控,而不是 3 元组 (u, v, key)
,就像 MultiGraph
中的情况一样。这引发了 ValueError: too many values to unpack
.
PS:draw_networkx_edge_labels
中的参数edge_labels
说明如下:
draw_networkx_edge_labels(
G, pos,
edge_labels=None, label_pos=0.5,
font_size=10, font_color='k',
font_family='sans-serif', font_weight='normal',
alpha=1.0, bbox=None, ax=None,
rotate=True, **kwds)
Edge labels in a dictionary of labels keyed by edge two-tuple. Only labels for the keys in the dictionary are drawn.
(注意这个描述中的“二元组”。)
我什至找不到如何用 matplotlib
绘制多重图(因为多重边不会显示)。但是,如果导出到 dot
,您将能够看到多个边,并且可以在边中使用标签属性标记它们。
#!/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')
# dump dot code
nx.drawing.nx_pydot.write_dot(G, 'multi.dot')
此代码需要 networkx
, pydot
, and GraphViz.
请注意,如果您查看模块 networkx.drawing.nx_pylab
, the default behavior of the function draw_networkx_edge_labels
is to use
{(u, v): d for u, v, d in G.edges(data=True)}
作为 edge_labels
属性的(默认值),该属性对于多图将失败,因为字典键必须是唯一的。因此,如果您想使用 matplotlib
绘图,您可能需要修改函数 draw_networkx_edge_labels
.
在class networkx.MultiGraph
, an edge is keyed by (u, v, key)
, for instance, ('n1', 'n2', 'key1')
. I would like to draw edge labels (say weight, (u, v, key): 10
) for MultiGraph
by using the function networkx.draw_networkx_edge_labels
.
但是,边缘标签由 draw_networkx_edge_labels
中的二元组 (u, v)
键控,而不是 3 元组 (u, v, key)
,就像 MultiGraph
中的情况一样。这引发了 ValueError: too many values to unpack
.
PS:draw_networkx_edge_labels
中的参数edge_labels
说明如下:
draw_networkx_edge_labels(
G, pos,
edge_labels=None, label_pos=0.5,
font_size=10, font_color='k',
font_family='sans-serif', font_weight='normal',
alpha=1.0, bbox=None, ax=None,
rotate=True, **kwds)
Edge labels in a dictionary of labels keyed by edge two-tuple. Only labels for the keys in the dictionary are drawn.
(注意这个描述中的“二元组”。)
我什至找不到如何用 matplotlib
绘制多重图(因为多重边不会显示)。但是,如果导出到 dot
,您将能够看到多个边,并且可以在边中使用标签属性标记它们。
#!/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')
# dump dot code
nx.drawing.nx_pydot.write_dot(G, 'multi.dot')
此代码需要 networkx
, pydot
, and GraphViz.
请注意,如果您查看模块 networkx.drawing.nx_pylab
, the default behavior of the function draw_networkx_edge_labels
is to use
{(u, v): d for u, v, d in G.edges(data=True)}
作为 edge_labels
属性的(默认值),该属性对于多图将失败,因为字典键必须是唯一的。因此,如果您想使用 matplotlib
绘图,您可能需要修改函数 draw_networkx_edge_labels
.