使用networkx绘制网络时仅显示节点无法显示边该如何解决
问题排查与解决方法
1. 先确认边是否成功添加到图中
在添加边的代码后插入以下代码,打印边的数量确认加边逻辑是否正确:
# 打印总边数,若输出为0说明加边逻辑有问题 print("总边数:", len(network.edges()))
如果输出为0,检查你的Excel读取逻辑、索引和列名是否匹配,以及非0判断的条件是否符合你的数据规则。
2. 修正绘图逻辑
如果确认边已经添加成功,按照以下方式修改绘图代码即可显示边:
- 首先补充matplotlib.pyplot导入语句,你的原代码中缺少该导入会导致相关功能异常
- 手动指定边的样式参数,避免默认参数导致边不可见
- 提前生成布局避免绘图时重复计算导致的样式异常
修改后的完整代码如下:
import pandas as pd import networkx as nx import matplotlib.pyplot as plt # 补充缺失的导入 network=nx.DiGraph() datacal=pd.read_excel('D:/20110630.xlsx',index_col=0) for i in range(len(datacal)-1): for j in range(i+1,len(datacal)): if datacal.iloc[i][j]!=0: network.add_edge(datacal.index[i],datacal.columns[j]) # 先确认边数 print("总边数:", len(network.edges())) # 生成布局,seed固定布局方便复现 pos = nx.spring_layout(network, seed=42) # 绘图时明确指定边的样式参数 nx.draw_networkx(network, pos=pos, node_size=15, edge_color='gray', # 指定边颜色避免和节点重叠 width=0.5, # 调整边宽度 arrowsize=3 # 有向图箭头大小,使用无向图可删除该参数 ) # 隐藏坐标轴 plt.axis('off') plt.show()
3. 特殊情况处理
如果节点数量过多导致边重叠被遮挡,可以做如下调整:
- 调小边的宽度,使用透明度更高的边颜色
- 更换布局算法,比如
nx.circular_layout、nx.kamada_kawai_layout - 增加画布尺寸,在绘图前添加
plt.figure(figsize=(12,12))调整画布大小
内容的提问来源于stack exchange,提问作者taylor
相关产品推荐
相关产品推荐

