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

如何使用Networkx绘制仅含高中心度Top节点的网络图

代码失效原因

原有代码无法得到预期结果,核心问题有3个:

  • 传入绘图函数的是全量图对象,即便指定nodelist参数,绘图逻辑仍会带出和列表内节点相连的非目标节点,不会自动过滤无关节点、边
  • 布局坐标nx.spring_layout(graph)基于全量节点计算,核心节点位置会被大量非核心节点干扰,布局松散错位
  • 代码存在变量名错误:读入数据存为df,建图时却传入了未定义的data变量
可直接运行的修正代码
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 读取边表数据建图
df = pd.read_csv("替换为你的文件实际路径.csv")
full_graph = nx.from_pandas_edgelist(df, source="source", target="target")

# 计算中心度,取排名前20的核心节点,可替换为任意中心度指标
centrality = nx.eigenvector_centrality(full_graph)
top20_core_nodes = sorted(centrality, key=centrality.get, reverse=True)[:20]

# 提取核心节点诱导子图:仅保留核心节点、以及核心节点之间的连边,自动过滤所有非核心内容
core_subgraph = full_graph.subgraph(top20_core_nodes)

# 基于核心子图计算布局,固定随机种子保证布局可复现
pos = nx.spring_layout(core_subgraph, seed=42)

# 按中心度值映射节点大小,数值越大节点尺寸越大
node_sizes = [centrality[node] * 3000 for node in core_subgraph.nodes()]

# 绘制网络图
plt.figure(figsize=(10, 8))
nx.draw_networkx(
    core_subgraph,
    pos=pos,
    node_size=node_sizes,
    node_color="#3b82f6",
    edge_color="#d1d5db",
    with_labels=True,
    font_size=9
)
plt.axis("off")
plt.show()
自定义调整说明
  • 更换中心度指标只需替换中心度计算行代码即可:
    • 度中心度:centrality = nx.degree_centrality(full_graph)
    • 介数中心度:centrality = nx.betweenness_centrality(full_graph)
    • 接近中心度:centrality = nx.closeness_centrality(full_graph)
  • 如果需要保留核心节点指向非核心节点的边、但不显示非核心节点,无需提取诱导子图,手动筛选符合条件的边列表后,在绘图时传入edgelist=筛选后的边列表、nodelist=top20_core_nodes即可
  • 调整节点大小的乘数值、画布尺寸、配色参数,可以匹配不同的可视化展示需求

内容的提问来源于stack exchange,提问作者Samsudeen Bankole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:54:27