我正在尝试使用包networkx
绘制图表。
在我的图中,我知道哪个节点是根节点,哪个节点是终端节点。
我希望我的图形是垂直构造的,并希望将根节点放在图形的顶部。因此,我想将终端节点放在底部。无论图形的边缘如何,我都希望将其保留在绘制的任何图形上。其间的节点可以任意放置(但在垂直方向,取决于它们的等级)。
在互联网上列出几个示例:我在its official site和来自this site的网络上检查了教程
this。
我也看到了一些SO问题
this,
this
和
PyGraphwiz。
他们在一定程度上帮助了我,但我无法得到我真正想要的东西。
我还检查了{{3}}
要了解是否可以通过创建'.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()
答案 0 :(得分:0)
定向图本身的结构定义定义了所有终端节点,
只有在图形结构/形状定义更改时移动根节点或时,终端节点才会更改。
在您的示例中,考虑使用节点' O'作为根,图论暗示只有' F' &安培; ' G'节点是终端..
另一方面,如果你最终不想修复/破解图表的图形渲染:
您可能会尝试获得&#34; y位置&#34;顶部底部终端节点的值(在您的示例节点中&#39; F&#39;),然后强制&#34; y位置&#34;您考虑过的所有其他节点#34;作为终端(在您的示例中[&#39; B&#39;,&#39; D&#39;,&#39; F&#39;,&#39; H&#39;])到同一位置。< / p>
或强>
您可以将图表布局更改为spring layout,并强制(通过指定加载时)&#34; x-y位置&#34;所有节点。
祝你好运