NetworkX的固定位置层次输出,无需graphviz?

2024-05-23 15:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python绘制简单的层次树。我正在使用networkx模块。我声明了一个简单的图

G=networkx.DiGraph() 

在G中添加节点和边之后,我尝试使用

^{pr2}$

或者

nx.draw_networkx(G) 

策划。输出图层次结构都是正确的,但节点的位置在图形上显示为随机的。更糟糕的是,每次运行脚本时,节点位置都不同。在

在一个类似的问题中提供了一个解决方案,这个问题需要graphviz包。在

pos=nx.graphviz_layout(G,prog='dot')
nx.draw(G,pos,with_labels=False,arrows=False)

不幸的是我不能安装graphviz。所以我在这里寻求另一种解决方案。 从graphviz的解决方案来看,它似乎只需要计算节点的位置。只要我为draw命令指定一个坐标列表,就可以在正确的位置绘制节点,这样说对吗?在

谢谢


Tags: 模块posnetworkxfalse声明节点层次结构绘制
1条回答
网友
1楼 · 发布于 2024-05-23 15:59:50

更新(2015年4月15日)请看我的答案here,我认为这些代码可以满足您的需求。在


所以networkx在没有graphviz布局的情况下并不容易使用graphviz布局,因为如果您试图复制graphviz的布局,那么使用graphviz的算法会更好。在

但是,如果您愿意计算每个节点的位置,这是很简单的(正如您所猜测的)。创建一个dict,说明每个节点的位置。在

pos = {}
for node in G.nodes():
    pos[node] = (xcoord,ycoord)

nx.draw(G,pos)

在xcoord和ycoord是你想要的坐标的地方。在

描述了各种绘图命令here

相关问题 更多 >