在NetworkX中绘制图表,将绘图区域划分为3

Fra*_*lla 2 python graph draw networkx

我在Networkx中有一个图表,里面有不同的信息.图形节点如下所示:

G = nx.DiGraph()
G.add_node(shape1, level=1)
G.add_node(shape2, level=2)
G.add_node(shape3, level=2)
G.add_node(shape4, level=3)
...
Run Code Online (Sandbox Code Playgroud)

我想绘制图形,以便在图形顶部的第1级具有所有形状,第3级中的所有形状位于图形的下部,所有形状位于第2级中间.最多有3个级别.

我一直在阅读来自NetworkX的文档,但到目前为止我只使用了节点的随机定位:

pos = nx.spring_layout(G) nx.draw(G, pos).

你知道任何更聪明的方法来定位图形的节点吗?

PS:所需的输出大致如下: 在此输入图像描述

我不需要画出划分等级的线条,我只是把它们弄清楚我需要什么.

Hoo*_*ked 5

布局"点"提供了graphviz的界面似乎做你正在寻找的.虽然它适用于您提供的这个简单图形,但您可能需要调整输出以获得更大更复杂的图形.

import networkx as nx

G = nx.DiGraph()
G.add_node(1,level=1)
G.add_node(2,level=2)
G.add_node(3,level=2)
G.add_node(4,level=3)

G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,4)

import pylab as plt
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues,
                 node_color=range(len(G)),
                 prog='dot')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述