如何在Python的networkx中为图节点显示标签

3

我有以下代码用于可视化networkx图形:

node_positions = networkx.spring_layout(graph)
networkx.draw_networkx_nodes(graph, node_positions)
networkx.draw_networkx_edges(graph, node_positions, style='dashed')

我希望在每个节点上显示节点标签。graph.nodes()会给我所有节点的列表,但我该如何使用它们在图形上标记节点呢?
我尝试了这个方法,但它不起作用:
networkx.draw_networkx_labels(graph,node_positions,graph.nodes(data="false"),font_size=16)

编辑:

我尝试了以下方法,目前可以正常工作:

for node,_ in graph.nodes(data="False"):
        labels[node] = node;
networkx.draw_networkx_labels(graph,node_positions,labels,font_size=16)

如果还有更好的方法,请让我知道。我觉得创建新字典过于冗余且不必要。

2个回答

1

enter image description here请查看nx.draw源代码绘图文档。我不太确定我是否正确理解了你的问题,因为根据我的理解,这是一个非常简单的问题,只需按照以下方式为图表添加标签:

networkx.draw(graph, node_positions, with_labels = True)

你也可以直接使用draw_spring,而不必显式地指定节点位置:

networkx.draw_spring(graph, with_labels = True)

这个图展示了运行以下代码后得到的结果:
import networkx as nx
G = nx.erdos_renyi_graph(10,0.4)
nx.draw(G, with_labels=True)
plt.show()

抱歉我没有表达清楚。我尝试过那个方法,但对我来说并不起作用。如果您参考此链接:(https://networkx.github.io/documentation/latest/examples/drawing/labels_and_colors.html),我想要的是能够在绘制的图形上显示0、1、2、3,而不是为每个节点分配特定的标签,例如alpha、beta等。 - mribot
G = nx.erdos_renyi_graph(10,0.1); nx.draw(G, with_labels=True); plt.show();在ipython笔记本上尝试这个代码,你会发现它自动为节点添加了数字标签。 - Abdallah Sobehy
请再次检查出现的图形以确认答案。 - Abdallah Sobehy

0
你的问题在于你发送了图节点列表,而不是一个可选参数,它期望一个字典。通过拥有这个可选参数,networkx允许你拥有任何你想要出现的标签。在你的情况下,你只想要节点名称的明显标签。这是默认行为。所以简单地...
networkx.draw_networkx_labels(graph,node_positions,font_size=16)

将足以满足要求。不发送字典,它将使用节点名称对其进行标记。

另一种选择是按照abdallah的建议完全绘制整个图形,并在networkx.draw命令中使用with_labels=True选项。


关于您问题的格式的简要评论

当我最初阅读您的问题时,我假设draw_networkx_labels命令给出的输出与您预期的不同。

现在我已经尝试了您的代码,我发现它实际上会产生一个错误。如果您告诉我们这一点,并且错误是

AttributeError:'list'对象没有属性'items'

那么就更容易找出问题所在了,因此,为了以后的参考,如果您遇到错误消息,它包含有关问题的信息。如果您发布一个问题,请同时发布错误消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接