【发布时间】:2014-09-13 13:35:47
【问题描述】:
我正在尝试使用包networkx 绘制图表。
在我的图表中,我知道哪个节点是根节点,哪些节点是终端节点。
我希望我的图表是垂直构造的,并希望将根节点放在图表的顶部。因此,我想将终端节点放在底部。无论图表的边缘如何,我都希望将其保留在绘制的任何图形上。中间的节点可以任意放置(但垂直方向取决于它们的等级)。
举几个互联网上的例子:我查看了its official site和来自networkx的教程
this site。
我也看到了一些这样的问题
this,
this
和
this。
他们在一定程度上帮助了我,但我无法得到我真正想要的东西。
我还检查了PyGraphwiz
了解是否可以通过创建'.dot' 文件来实现这样的节点排列,但我无法取得任何进展。
我绘制的图表及其代码如下所示。可以看出,没有任何线或标记来定义哪个节点是根节点,哪些是终端。
import networkx as nx
import matplotlib.pyplot as plt
graph = [('O', 'A'), ('O', 'C'), ('O', 'E'), ('O', 'G'), ('O', 'H'),
('A', 'B'), ('A', 'O'),
('B', 'A'),
('C', 'D'), ('C', 'E'), ('C', 'F'), ('C', 'O'),
('D', 'E'), ('D', 'C'), ('D', 'F'),
('E', 'C'), ('E', 'D'), ('E', 'F'), ('E', 'O'),
('F', 'C'), ('F', 'D'), ('F', 'E'),
('G', 'H'), ('G', 'O'),
('H', 'G'), ('H', 'O')]
root_node = 'O'
terminal_nodes = ['B', 'D', 'F', 'H']
G=nx.DiGraph()
for edge in graph:
G.add_edge(edge[0], edge[1])
pos=nx.graphviz_layout(G,prog='dot')
nx.draw(G, pos, arrows=False)
plt.show()
【问题讨论】: