[英]in NetworkX draw the graph dividing the plot area in 3
我在 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)
...
我想绘制图表,以便将第 1 级的所有形状都放在绘图的顶部,将第 3 级的所有形状放在绘图的下部,将第 2 级的所有形状放在中间。 最多有3个级别。
我一直在阅读 NetworkX 的文档,但到目前为止,我只使用了节点的这种随机定位:
pos = nx.spring_layout(G) nx.draw(G, pos)
。
你知道任何更聪明的方法来定位我想要的图形节点吗?
PS:所需的输出大致是这样的:
我也不需要画线来划分层次,我只是把它们放在清楚我需要什么上。
提供给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()
NetworkX 2.6.2 的更新答案:
pos = nx.nx_pydot.graphviz_layout(G, prog="dot")
nx.draw(G, pos=pos, with_labels=True, font_weight='bold')
plt.show()
(确保您已安装pydot
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.