Matplotlib散点图x轴数值显示异常与输入数据不匹配如何解决?
问题原因
这是matplotlib的自动轴标注机制导致的:当所有x轴数值的波动范围极小时(本次所有x值的最大差值不到0.00013),matplotlib默认启用偏移显示模式:
- 轴面显示的刻度为原始数值减去基准偏移量后的结果
- 基准偏移量(本次为1)会标注在x轴的最右上角,很容易被忽略,因此会产生x轴数值和输入不符的错觉。
解决方案
可根据需求选择任意一种方案修复:
方案1:关闭x轴偏移显示
在绘图代码中新增关闭偏移的配置即可,x轴会直接展示原始真实数值:
import matplotlib.pyplot as plt x = [1.0, 1.0, 1.0, 1.0, 1.0, 0.9999390392587174, 1.0000609607412827, 1.0000609607412827] y = [132, 136, 160, 192, 132, 136, 160, 192] fig, ax = plt.subplots() for i in range(len(x)): ax.scatter(x[i], y[i]) # 新增配置:关闭x轴偏移显示 ax.ticklabel_format(axis='x', useOffset=False) plt.savefig('demo.png')
方案2:手动指定x轴显示范围
如果不需要展示极小的精度差异,可以手动设置x轴范围,让刻度显示更符合直观:
# 在savefig前添加如下代码即可 ax.set_xlim(0.9998, 1.0002)
额外优化建议
你当前的代码逐点遍历绘制散点是冗余的,直接将x、y数组整体传入scatter方法即可完成所有点的绘制,代码更简洁性能也更好:
# 替代原有的for循环逐点绘制 ax.scatter(x, y)
内容的提问来源于stack exchange,提问作者Song Tùng
相关产品推荐
相关产品推荐

