如何简化 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)]
我希望在选定的节点集上“简化”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)]