python - 如何使用networkx图过滤具有特定属性的节点并保留路径

标签 python graph networkx

这些天我正在研究networkx graph。 假设我有这张图。蓝色节点为优先级 1,黄色节点为优先级 2,紫色节点为优先级 3,绿色节点为优先级 4。

enter image description here

我想按优先级进行过滤。例如第一个优先级1,它应该过滤蓝色的节点。我想保留蓝色节点(优先级 1)并忽略其余节点,它应该如下所示。

enter image description here

对于优先级 2,包括优先级节点,它应该显示黄色节点。保留优先级 1(蓝色)和优先级 2(黄色)。这里我应该保留从 10 到 190 的路径,因为有一条来自被忽略节点的路径。它应该看起来像这样。

enter image description here

对于优先级 3 和 4 也是如此。例如,对于优先级 3,我希望将优先级 1、2 和 3 保留在一起,正如我在优先级 2 中所示的那样。

这就是我开始的方式。

collector = nx.DiGraph()
for n1, atrr1 in g1.nodes(data ='True'):
    for n2, atrr2 in g1.nodes(data ='True'):
        if ((g1.node[n1]['priority'] ==1) & (g1.node[n2]['priority'] ==2)):

            if (has_path(g1,n1, n2)):
                collector.add_edge(n1,n2)

        if ((g1.node[n2]['priority'] ==2) & (g1.node[n1]['priority'] ==2)):

            if (has_path(g1,n1, n2)):
                collector.add_edge(n1,n2) 


nx.draw(collector, with_labels = True, pos = nx.spring_layout(collector))
plt.rcParams["figure.figsize"] = [6,6]
plt.axis('off')
plt.show()

谁能帮我用 python 做到这一点?

最佳答案

一种方法是计算图可达性矩阵(在 a 行、b 列中具有 1 的方阵如果节点 b 可以通过图边从节点 a 到达)。您可以找到如何实现此 here 。 然后,您所要做的就是过滤掉所需的节点,并使用计算矩阵重新绘制过滤后的节点的边(通过仅遍历与新图中出现的节点相对应的行和列,并绘制一个有 1 的边缘)。

关于python - 如何使用networkx图过滤具有特定属性的节点并保留路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805640/

相关文章:

python - Pandas :将缺失日期添加到当前日期

python - 3D 数组的快速插值

python - 根据每个 Action 的概率创建 Action 列表

algorithm - 图同构启发式解决方案

java - 树节点之间的路径,边缘之间的成本在遍历方向上不同

python - 如何使 Networkx 生成带有排序节点的 GML 文件

python - 从响应中返回特定字符串

python - 将图像应用于 pyplot python 条形图

python - NetworkX:将权重复制到新图,权重是重复的

python - 如何将 quotient_graph 结果写入文件