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

Python使用NetworkX绘制无重叠、大间距清晰网络图的实现方法

调整方案

你可以从布局参数、画布尺寸、绘图元素大小三个维度调整,修改后的代码可直接解决节点重叠、间距小的问题:

  • 首先扩大画布尺寸,给网络图足够的展示空间
  • 优化布局算法参数:spring_layout的k值可以根据节点数量微调,增加iterations参数提高布局收敛效果,新增seed保证每次生成的布局固定方便调整
  • 移除重复的边绘制逻辑:原代码同时调用nx.draw_networkx_edges和nx.draw会重复渲染边,统一在nx.draw中配置边样式即可
  • 调小节点、字体的尺寸,避免元素本身过大导致拥挤
import networkx as nx
import matplotlib.pyplot as plt

g = nx.read_edgelist('Input.txt', nodetype=str,
  data=(('weight',int),), create_using=nx.DiGraph())

# 提前设置画布尺寸,可根据节点数量调整,节点越多尺寸越大
plt.figure(figsize=(16,16), dpi=100)

# 优化布局参数,k值可根据实际效果在1-100区间调整,节点越多k可以适当调大
pos = nx.spring_layout(g, k=80, iterations=200, seed=42)

# 统一配置绘图参数,避免重复绘制
nx.draw(g, pos, 
        with_labels=True,
        node_size=500, # 可根据需求调整节点大小
        font_size=10, # 可根据需求调整节点标签字体大小
        width=5, 
        alpha=1, 
        edge_color='orange')

# 绘制边权重标签,可调整font_size避免标签重叠
labels = {e: g.edges[e]['weight'] for e in g.edges}
nx.draw_networkx_edge_labels(g, pos, edge_labels=labels, font_size=8)

# 去掉边框让图更整洁
plt.axis('off')
plt.show()

可选优化:如果弹簧布局效果仍不符合预期,可以替换为其他布局

  • 普通有向图适合用pos = nx.kamada_kawai_layout(g),布局更规整
  • 有层级结构的图可以用pos = nx.nx_agraph.graphviz_layout(g, prog='dot')(需要提前安装pygraphviz依赖)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:03