Matplotlib绘图y轴刻度自动偏移 实际值约100却显示0.001量级如何修复
问题原因
这是matplotlib默认的刻度优化逻辑导致的:你提供的Y轴数值全部集中在99.997到100.003区间,整体基准值接近100,但数值波动幅度不到0.01。为了更清晰展示波动细节,matplotlib会自动把Y轴刻度转换为相对于基准值的差值,基准值100会单独标注在Y轴边缘,不会显示在刻度上,所以你看到的刻度都是0.001量级的数值。
修正方案
任选以下任意一种方法即可解决:
- 方案1:关闭Y轴的偏移显示(最便捷)
直接关闭matplotlib的Y轴自动偏移逻辑,强制显示完整的数值刻度,修改代码如下:
import matplotlib.pyplot as plt # 原有绘图代码 plt.plot(ss['x'].iloc[0:n], ss['y'].iloc[0:n], linestyle="-", marker='>', label=sector) plt.legend() # 新增关闭Y轴偏移的代码 plt.ticklabel_format(axis='y', useOffset=False) # 如果同时需要禁止科学计数法,可替换为下面这行 # plt.ticklabel_format(axis='y', useOffset=False, style='plain') plt.show()
- 方案2:手动指定Y轴刻度范围
如果需要更精确控制Y轴的显示范围,可以手动设置Y轴上下限:
plt.plot(ss['x'].iloc[0:n], ss['y'].iloc[0:n], linestyle="-", marker='>', label=sector) plt.legend() # 可根据你的实际数据调整上下限数值 plt.ylim(99.997, 100.003) plt.show()
- 方案3:自定义Y轴刻度格式化
如果需要自定义刻度的小数显示位数,可以用FuncFormatter自定义格式:
from matplotlib.ticker import FuncFormatter # 定义格式化函数,可按需调整保留的小数位数 def format_y_tick(val, pos): return f"{val:.6f}" plt.plot(ss['x'].iloc[0:n], ss['y'].iloc[0:n], linestyle="-", marker='>', label=sector) plt.legend() # 应用自定义格式 plt.gca().yaxis.set_major_formatter(FuncFormatter(format_y_tick)) plt.show()
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

