You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:54:03