NetworkX中的边缘标签不正确

2024-05-23 18:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到networkx包有点奇怪。这里是一个最小的具体可验证的例子。在

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edge('A', 'B', weight=1, title='ab', subtitle='testing')
edge_labels = nx.get_edge_attributes(G, 'title')
print(edge_labels)

这将给出预期的输出,即边缘的title属性。在

^{pr2}$

当我使用edge_标签进行打印时

fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True)

nx.draw_networkx_edge_labels(G, pos, labels=edge_labels)
plt.show()

我看到下图,其中显示了所有边属性。我只希望出现标题。在

enter image description here

我正在构建的图是一个循序渐进的过程,因此随着更多信息的处理,边缘标签会得到更新。如何在图形构造结束时只使用我想要的属性来标记边?在


Tags: posimportnetworkxlabels属性titleasplt
1条回答
网友
1楼 · 发布于 2024-05-23 18:45:19

使用

nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)

而不是

^{pr2}$
import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edge('A', 'B', weight=1, title='ab', subtitle='testing')
edge_labels = nx.get_edge_attributes(G, 'title')
print(edge_labels)

fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True)

nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.show()

收益率

enter image description here


由于call signature for ^{}看起来像这样:

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提供标签。由于调用签名还包括**kwds,伪参数labels被静默地吞没,this piece of code

if edge_labels is None:
    labels = dict(((u, v), d) for u, v, d in G.edges(data=True))

生成您在结果中看到的“奇怪”标签。在

相关问题 更多 >