我正在尝试使用networkx创建带标签的图形,但是无法正确地获取节点和标签.简而言之,标签不会排列在右侧节点上,并且有些节点在显示时没有边缘.
首先,我创建了一个图形,添加了节点和边,然后添加了标签.
图形数据来自pandas DataFrame对象,其中包含两个列:employee和manager名称:
emp_name mgr_name
0 Marianne Becker None
1 Evan Abbott Marianne Becker
2 Jay Page Marianne Becker
3 Seth Reese Marianne Becker
4 Maxine Collier Marianne Becker
Run Code Online (Sandbox Code Playgroud)
...
每个节点都是名称,边是mgr_name到emp_name的关系.
我的图代码:
import networkx as nx
G=nx.DiGraph()
#set layout
pos=nx.spring_layout(G)
#add nodes
G.add_nodes_from(df.emp_name)
G.nodes()
G.add_node('None')
#create tuples for edges
subset = df[['mgr_name','emp_name']]
tuples = [tuple(x) for x in subset.values]
#add edges
G.add_edges_from(tuples)
G.number_of_edges()
#draw graph
import matplotlib.pyplot as plt
nx.draw(G, labels = True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会有一个树状结构,员工姓名作为每个节点的标签.
输出图像是 
在我将matplotlib更新到当前版本后,我遇到了networkX中的节点标签问题:如果我使用该nx.draw(G)命令,我会得到一个图表,但不会显示任何标签.但让我们举个例子说:
import networkx as nx
import matplotlib.pylab as plt
T=nx.Graph()
T.add_edge(0,1)
nx.draw(T)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这将返回一个有效的图,但没有节点标签.即使我直接传递标签
import networkx as nx
import matplotlib.pylab as plt
T=nx.Graph()
T.add_edge(0,1)
labs={}
labs[0]='cake'
labs[1]='cookie'
nx.draw(T,labels=labs)
plt.show()
Run Code Online (Sandbox Code Playgroud)
仍然没有标签.我很确定它(特别是上面的)在更新之前昨天正在工作.那么matplotlib 1.3.x是否有变化(不记得我之前运行的那个)?目前的版本是:
matplotlib (1.4.0) (had to downgrade the pyparsing to 1.5.7 after updating the matplotlib)
networkx (1.9)
python 2.7.6
Mac OS X 10.9.4
Run Code Online (Sandbox Code Playgroud)
Little Extra:如果我运行上面的代码,nx.draw(T, with_labels=True)我得到一个情节(我的设置上的额外窗口),当我关闭它时TypeError: bad argument type for built-in operation弹出一个.如果我跑nx.draw(T, with_labels=False),这不会发生,这是非常令人困惑的,因为我认为with_labels参数采用布尔值(见这里),它(部分)不....
我在这里误解了什么吗?
编辑:@tcaswell希望有所帮助!
---------------------------------------------------------------------------
TypeError Traceback (most …Run Code Online (Sandbox Code Playgroud)