无法在NetworkX图中看到标签

3

这是我在Python 2.7.9中的代码:

import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
nx.draw(socialNetworl, node_size = 800, node_color="cyan")
plt.show()

但是我无法看到节点标签。我是否忘记了一行代码?

2个回答

6
只需在代码中添加with_labels=True即可。
import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
nx.draw(socialNetworl, node_size = 800, node_color="cyan", with_labels = True)
plt.show()

enter image description here

如果你想要更改标签,需要创建一个字典来存储标签,然后通过labels=theLabelDict将其传递给nx.draw

import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
labels = {1:'King Arthur', 2:'Lancelot', 3:'shopkeeper', 4:'dead parrot', 5:'Brian', 6:'Sir Robin'}
nx.draw(socialNetworl, node_size = 800, node_color="cyan", labels=labels, with_labels = True)
plt.show()

enter image description here


我有一个问题,在我的情况下,我从数据库中获取名字,当有一个包含Ñ字母的名字时(例如姓氏BOLAÑOS),就会出现错误。我使用了# -- coding: utf8 --,但这并不足够。我读到说matplotlib需要一个应该包含特殊字符的文件。提前致谢。 - undefined

3
您可以使用nx.draw_networkx_labels单独绘制节点标签(还可以控制许多其他标签选项)。例如,在添加节点和边之后,您可以编写以下代码:
pos=nx.spring_layout(socialNetworl)
nx.draw(socialNetworl, pos=pos, node_size = 800, node_color="cyan")
nx.draw_networkx_labels(socialNetworl, pos=pos);
plt.show()

这是一个画图:

enter image description here


我正在制作一个社交网络图表,我尝试将数字标签更改为姓名标签,但出现了错误。是否可以将数字更改为名字和姓氏?例如将5更改为Fred Kennedy? - undefined
1
@ajcr 您可以简化您的代码。不需要调用 nx.draw_networkx_labels。只需执行 nx.draw 并将其传递给 with_labels=True - undefined
1
@gs_developer_user3605534 我在 https://dev59.com/814b5IYBdhLWcg3w7FYv#28533293 给出了更改标签显示的方法。请注意,您可以在 nx.draw 中完成所有操作,而不必添加 nx.draw_networkx_labels - undefined
感谢 @Joel - 最近的一些工作让我养成了将两者分开并使用 draw_networkx_labels 单独绘制标签的习惯。对于像 OP 这样的情况,我肯定会选择您的答案。 - undefined
我想问另一个问题,在我的图表中,我有600个节点,但当它们出现时,节点太接近了,我该如何显示较少的连接? - undefined

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