如何简化 networkx 图?

How to simplify a networkx graph?

我希望在选定的节点集上“简化”NetworkX 有向图。例如我有这个起始有向图

而且我只想查看节点 [1,2,4 和 6] 的子图中的关系。即如下:

基本上我只想在我选择的节点上显示“结果依赖关系”。

到目前为止,我已经尝试了如下的子图方法。

正在创建原始图表:

G = nx.DiGraph() 
G.add_edges_from([(1,3),(3,4),(1,5),(5,6),(2,6),(4,6)])

..然后创建一个子图:

chosen_nodes = [1,2,4,6]
SG = G.subgraph(chosen_nodes)

但是生成的子图除了2-6和4-6关系之外不保留任何边的依赖关系。

print(list(SG.edges))
>> [(4, 6), (2, 6)]

我认为一种简洁的方法是生成传递闭包的子图。

from networkx.algorithms.dag import transitive_closure

def dependency_graph(G, nodes):
    return transitive_closure(G).subgraph(nodes)

print(dependency_graph(G, [1, 2, 4, 6]).edges)
>> [(1, 4), (1, 6), (4, 6), (2, 6)]