固定坐标绘制NetworkX关系图节点偏移、plt.text丢失问题求解
问题原因
- 节点坐标偏移:你通过
isin()筛选国家后,得到的cut['Nation']列顺序和你定义的top_10_list输入顺序不一致,循环绑定坐标时,国家和预设坐标的对应关系发生错位,导致节点位置偏移。 - 左下角文本消失:Matplotlib默认会根据图中元素的坐标自动调整坐标轴显示范围,3节点场景下所有节点的坐标都比-1.15更靠上,y轴下限被自动拉高,你放置在
(-1.15,-1.15)的文本就落在了画布可视范围外,因此消失。
修复方案
- 直接建立国家与固定坐标的映射字典,不要依赖列表顺序绑定坐标,避免错位问题。
- 手动固定坐标轴的显示范围,确保文本不会落在画布外。
- 移除无意义的空列表判断逻辑,优化链式赋值避免Pandas警告。
核心修改后代码片段
# 提前建立国家和坐标的固定映射,可按需补全所有10个国家的对应关系 pos_map = { "USA": (-0.30779309, -0.26419882), "CHN": (0.26767895, 0.19524759), "KOR": (-0.38479095, 0.88179998), # 剩余7个国家的坐标对应关系按需求补全 } plt.figure(figsize=(10,10), dpi = 100) G = nx.from_pandas_edgelist(top10, 'reporteriso3', 'partneriso3', 'tradevalue', create_using= nx.DiGraph()) widths = nx.get_edge_attributes(G,'tradevalue') # 直接从映射字典取坐标,不用循环绑定 pos = {nation: pos_map[nation] for nation in top_10_list} pos_nodes = nudge(pos, 0, 0.12) nx.draw_networkx_edges(G,pos, width=list(widths.values()), edge_color = '#9ECAE4') nx.draw_networkx_nodes(G, pos=pos, nodelist = cut['Nation'], node_size= cut['final'], node_color ='#AB89EF', edgecolors ='#000000') nx.draw_networkx_labels(G,pos_nodes, font_size=15) plt.text(-1.15,-1.15,s='hs : ') # 手动固定坐标轴范围,确保文本在可视区域内 plt.xlim(-1.2, 1.2) plt.ylim(-1.2, 1.2) # 可选:关闭坐标轴显示更美观 plt.axis('off') plt.savefig(location,dpi=300)
内容的提问来源于stack exchange,提问作者Jeong In Kim
相关产品推荐
相关产品推荐

