You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Matplotlib轴刻度标签显示带偏移量的科学计数法?

解决Matplotlib子图刻度统一为带偏移的科学计数法格式

要让所有子图的轴刻度都采用带偏移量的科学计数法(刻度标签显示小数值,右上角标注b×10^c,刻度值a对应实际值(b+a)×10^c),可以通过强制配置ScalarFormatter参数实现,避免Matplotlib自动选择格式的不一致性。

核心解决方案

使用matplotlib.ticker.ScalarFormatter,通过以下配置强制启用带偏移的科学计数法:

  • 开启useMathText=True:让科学计数法的指数部分用美观的10^c格式显示
  • 设置set_powerlimits((-3, 3)):当数值绝对值超出10^-3到10^3范围时,强制触发带偏移的格式(你的数值远大于10^3,完全符合触发条件)
  • 强制useOffset=True:确保偏移量始终显示,不会被Matplotlib自动关闭

修改后的完整代码

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

targets = [[-167297.54344731, -167301.10372634, -167308.44207031, -167312.11313287],[-145434.59446349, -145430.40561915, -145432.73985156, -145432.6785802]]
preds = [[-167298.46656051, -167300.59898357, -167308.72554459, -167311.71904965],[-145433.43693344, -145429.41508183, -145432.73929695, -145431.94648615]]

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))

# 创建统一的刻度格式化器
formatter = ScalarFormatter(useMathText=True)
formatter.set_powerlimits((-3, 3))
formatter.useOffset = True

for i in range(2):
    min_max = [min(targets[i]+preds[i]), max(targets[i]+preds[i])]
    offset = 2
    axs[i].set_ylim(min_max[0]-offset, min_max[1]+offset)
    axs[i].set_xlim(min_max[0]-offset, min_max[1]+offset)
    axs[i].set_aspect("equal")
    axs[i].scatter(targets[i], preds[i])
    
    # 为当前子图的x、y轴应用格式化器
    axs[i].xaxis.set_major_formatter(formatter)
    axs[i].yaxis.set_major_formatter(formatter)
    
    # 刷新格式化器,确保每个轴的偏移量正确计算
    formatter.axis = axs[i].xaxis
    formatter.format_data(0)
    formatter.axis = axs[i].yaxis
    formatter.format_data(0)

plt.tight_layout()
plt.show()

关键细节说明

  • 每个子图单独刷新格式化器是因为不同子图的数值范围不同,需要各自计算对应的偏移量b
  • useMathText=True会让右上角的偏移标签显示为b×10^c的标准科学计数法格式,而非纯文本形式
  • 如果需要调整刻度数量,可以配合MaxNLocator使用,比如axs[i].xaxis.set_major_locator(plt.MaxNLocator(4)),放在应用格式化器之后即可保证稳定效果

内容的提问来源于stack exchange,提问作者Paddy Cahalane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:45:11