如何在python networkx中显示图形节点的标签

时间:2015-09-28 01:14:39

标签: python networkx

我有以下代码可视化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 个答案:

答案 0 :(得分:1)

enter image description here检查nx.draw source codedrawing documentation。我不太确定我的问题是否正确,因为根据我的理解,这是一个相当直接的问题,只需按照以下方式为图表添加标签:

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()

答案 1 :(得分:0)

你的问题是你发送了图形节点列表来代替一个可选参数,它预期一个字典。通过使用此可选参数,networkx允许您拥有所需的任何标签。在您的情况下,您只需要节点名称的明显标签。这是默认行为。所以简单地

networkx.draw_networkx_labels(graph,node_positions,font_size=16)

就足够了。不要发送dict,它将使用节点名称来标记它们。

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

简要评论您的问题格式

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

现在我已经尝试过你的代码了,我发现它确实给出了一个错误。告诉我们那个错误是

  

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

可以更容易找出错误的内容,因此如果您收到错误消息以供将来参考,它会包含有关问题的信息。如果您发布问题,也请发布错误消息。