2015-09-28 124 views
2

显示图形节点的标签我有下面的代码的可视化图形networkx:我怎样才能在Python 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) 

如果仍然有一些优雅的方式要做到这一点,请让我知道。我觉得创建新的字典是矫枉过正的,多余的,不应该被要求。

+0

可能的重复[绘制网络图的节点标签默认为节点名称](http://stackoverflow.com/questions/28533111/plotting-networkx-graph-with-node-labels-defaulting-to-node-name ) – Joel

回答

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

对不起,我不够清楚。我尝试过,但那不适合我。如果你引用这个链接:(https://networkx.github.io/documentation/latest/examples/drawing/labels_and_colors.html) 我想要一些可以在绘制的图形上显示0,1,2,3的东西,而不是特别的为每个节点分配一些标签,在这种情况下是alpha,beta等等。 – mribot

+0

'G = nx.erdos_renyi_graph(10,0.1); nx.draw(G,with_labels = True); plt.show()';在ipython笔记本上试试这个,你会发现它会自动为节点添加数字标签 –

+0

再次检查答案的出现数字。 –

0

哟你的问题是,你发送图表节点的地方,而不是一个可选的参数,它需要一个字典。通过拥有这个可选参数,networkx允许您拥有任何想要显示的标签。在你的情况下,你需要明显的节点名称标签。这是默认行为。所以简单

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

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

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

当我最初读你的问题的格式


简短的评论,我以为draw_networkx_labels命令让你从预期的输出不同。

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

AttributeError: 'list' object has no attribute 'items'

将使它更容易弄清楚什么是错的,所以以供将来参考,如果你得到一个错误信息,它包含有关该问题的是什么样的信息。如果您发布了问题,请发布错误消息。