Python3.11.8中NetworkX绘图报错及布局异常求助
问题解决建议
1. 复用布局位置变量,避免重复生成随机布局
你当前代码中每次调用nx.spring_layout()都会生成全新的随机节点位置,这是导致节点扎堆、边错位的核心原因——节点和边使用了不同的布局坐标。正确做法是先计算一次布局并存入变量,后续绘图全程复用该变量:
import networkx as nx import matplotlib.pyplot as plt K33 = nx.complete_bipartite_graph(3, 3) # 仅计算一次布局,后续绘图共用该位置 pos = nx.spring_layout(K33) print(pos) fig, ax = plt.subplots() nx.draw_networkx(K33, pos=pos, ax=ax) # 让matplotlib自动适配轴范围,无需手动硬设 ax.autoscale() plt.show()
2. 排查networkx与matplotlib版本兼容性
nx.draw()报错TypeError: '_AxesStack' object is not callable,大概率是Python升级后,自动更新的matplotlib版本与当前networkx版本不兼容导致的。可以按以下步骤处理:
- 查看当前依赖版本:
pip show networkx matplotlib
- 尝试升级networkx到最新稳定版,或降级matplotlib至之前兼容的版本(比如matplotlib 3.7.5):
# 升级networkx pip install --upgrade networkx # 或降级matplotlib pip install matplotlib==3.7.5
3. 拆分绘制节点与边时,确保共用同一布局
如果需要分开调用nx.draw_networkx_nodes()、nx.draw_networkx_edges()等函数,必须保证所有绘图方法传入同一个pos变量:
fig, ax = plt.subplots() pos = nx.spring_layout(K33) # 所有绘图逻辑共用同一个pos nx.draw_networkx_nodes(K33, pos=pos, ax=ax, node_color='#4287f5') nx.draw_networkx_edges(K33, pos=pos, ax=ax, edge_color='#999999') nx.draw_networkx_labels(K33, pos=pos, ax=ax) ax.autoscale() plt.show()
内容的提问来源于stack exchange,提问作者Namrata Banerji
相关产品推荐
相关产品推荐

