繁体   English   中英

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

[英]How to filter nodes with specifc attribute and preserve the path using networkx graph

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

在此处输入图像描述

我想按优先级过滤。 例如第一个优先级 1,它应该过滤带有蓝色的节点。 我想保留蓝色节点(优先级 1)并忽略 rest,它应该看起来像这样。

在此处输入图像描述

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

在此处输入图像描述

优先级 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 中做到这一点?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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