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

如何在自定义刻度标签的情况下手动设置坐标轴偏移量?

解决imshow自定义y轴标签的轴偏移问题

当imshow使用自定义标签标记行列时,若y轴数值过大,常规的ScalarFormatter方案因自定义标签无法生效,可通过以下手动方式添加轴偏移:

实现思路

  1. 确定统一的偏移缩放因子(比如取y轴数值的公共倍数,这里是1e7)
  2. 将原始y轴标签除以缩放因子,得到简化后的刻度值
  3. 在y轴顶部添加偏移标注,明确刻度的实际倍数

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

s = 10000000
x, y = [1, 1, 2, 3, 5], [2*s, 3*s, 5*s, 7*s]
x, y = np.meshgrid(x, y)
z = np.random.rand(x.shape[0], x.shape[1])

plt.imshow(z)
ax = plt.gca()

# 设置坐标轴刻度位置
ax.set_yticks(range(len(y[..., 0])))
ax.set_xticks(range(len(x[0, ...])))

# 设置x轴标签(保持原数值)
ax.set_xticklabels(x[0, ...])

# 处理y轴:添加偏移
scale = 1e7  # 自定义偏移缩放因子
simplified_ylabels = y[..., 0] / scale
ax.set_yticklabels(simplified_ylabels.astype(int))  # 转为整数更美观

# 在y轴顶部添加偏移标注
ax.text(-0.1, 1.02, f'×{scale:.0e}', transform=ax.transAxes, va='bottom', ha='center')

plt.show()

关键说明

  • transform=ax.transAxes确保标注位置基于坐标轴的相对位置,不会随数据范围变化偏移
  • 缩放因子可根据实际y轴数值调整,比如如果y值是1e5的倍数,就设为1e5
  • 若需要更灵活的格式(比如保留小数),可修改simplified_ylabels的格式化方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:48:16