Pyplot绘图时所有数据点堆叠在轴同一位置的原因排查
问题原因及解决办法
核心原因
你设置了ax.set_aspect(1),强制让x轴和y轴的单位长度视觉上相等。但你的数据跨度差异极大:
- x轴(n_vec)的取值范围是100到100000,跨度达99900
- y轴(te_scores)的取值范围仅0.85到0.87,跨度只有0.02
在5x5的画布上,y轴的微小跨度会被压缩成几乎一条水平线,所有散点自然看起来堆叠在一起。
解决办法
直接移除ax.set_aspect(1)这行代码,让matplotlib自动适配坐标轴的纵横比:
plt.figure(figsize=(5,5)) ax = plt.gca() ax.set_ylim([0.85, 0.87]) ax.scatter(n_vec, te_scores, color=(0,0,1,0.3), s=100) # ax.scatter(n, tr_scores, color=(1,0,0,0.3), s=100) # 移除ax.set_aspect(1) plt.show()
如果确实需要自定义纵横比,不要用固定的1,改用自适应模式:
ax.set_aspect('auto')
或者根据数据跨度手动计算合适的比例,让x轴和y轴的跨度视觉上匹配:
x_range = max(n_vec) - min(n_vec) y_range = 0.87 - 0.85 ax.set_aspect(x_range / y_range)
内容的提问来源于stack exchange,提问作者Rudy Brown
相关产品推荐
相关产品推荐

