繁体   English   中英

在 NetworkX 中绘制将绘图区域划分为 3 的图形

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM