我正在尝试使用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
。。。
每个节点是一个名称,边是mgr_name to 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()
理想情况下,我会有一个树状结构,每个节点的标签都是员工姓名。
输出图像是
Networkx有许多绘制图表的功能,但也允许用户对整个过程进行精细控制。
draw
是basic,它的docstring特别提到:以
draw_networkx
为前缀,后跟edges
、nodes
、edge_labels
和edge_nodes
的函数可以更好地控制整个绘图过程。当使用
draw_networkx
时,您的示例运行良好。此外,如果您正在寻找类似于有机图的输出,我建议通过networkx使用graphviz。Graphviz的
dot
是这类图的理想选择(对于dot也请see this)。在下面的内容中,我试图稍微修改您的代码,以演示这两个函数的使用:
您还可以通过
nx.write_dot
保存networkx网络,从命令行直接使用graphviz的点。为此:在python脚本中:
在此之后,从(linux)命令行并假设已安装graphviz:
对于更典型的有机图格式,可以通过
最后,这里是输出
输出
draw_networkx
输出
draw_graphviz
无正交边
dot
的输出具有正交边的
dot
的输出希望这有帮助。
相关问题 更多 >
编程相关推荐