Python-Networkx如何筛选指定节点并绘制其所属的所有连通分量
NetworkX筛选指定节点并绘制其所属连通分量操作方法
你可以按照以下步骤完成需求,以你给出的示例数据为例,完整操作如下:
注意:如果你的业务场景中边不需要区分方向,可直接使用无向图的连通分量计算逻辑;如果需要保留边方向,默认使用弱连通分量规则(两点间只要存在任意方向的路径就算属于同一分量)即可。
- 首先安装依赖:执行命令
pip install networkx matplotlib完成所需库的安装 - 第二步按照如下代码编写逻辑即可实现需求:
import networkx as nx import matplotlib.pyplot as plt # 1. 构建有向图,不需要方向可替换为 nx.Graph() G = nx.DiGraph() # 2. 加载示例边数据,同时保存金额属性 edges = [ ('a', 'b', {'amount': '$200'}), ('a', 'c', {'amount': '$100'}), ('c', 'a', {'amount': '$400'}), ('b', 'd', {'amount': '$500'}), ('e', 'f', {'amount': '$200'}), ] G.add_edges_from(edges) # 3. 指定要筛选的目标节点 target_node = 'a' # 4. 查找目标节点所属的连通分量:无向图请替换为 nx.connected_components(G) for component in nx.weakly_connected_components(G): if target_node in component: target_component = component break # 5. 提取对应子图 sub_graph = G.subgraph(target_component) # 6. 绘制子图 pos = nx.spring_layout(sub_graph, seed=42) # 固定布局方便结果可复现 # 绘制节点 nx.draw_networkx_nodes(sub_graph, pos, node_size=700, node_color='lightblue') # 绘制边 nx.draw_networkx_edges(sub_graph, pos, arrowstyle='->', arrowsize=20) # 绘制节点标签 nx.draw_networkx_labels(sub_graph, pos, font_size=12, font_weight='bold') # 绘制边的金额标签 edge_labels = nx.get_edge_attributes(sub_graph, 'amount') nx.draw_networkx_edge_labels(sub_graph, pos, edge_labels=edge_labels) plt.axis('off') plt.show()
上述代码运行后会输出仅包含a、b、c、d四个节点的连通分量图,e和f所在的另一连通分量会被自动排除,符合你的筛选需求。
内容的提问来源于stack exchange,提问作者Gabriel Choo
相关产品推荐
相关产品推荐

