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

如何在Python中为imshow重新设置全范围刻度标签?

解决imshow热图刻度标签与数值不匹配的问题

直接用set_xticklabels(A)和set_yticklabels(B)只显示前几个标签,是因为imshow默认仅生成少量刻度位置,和A、B数组的长度不匹配。要让刻度标签关联全范围数值,需先指定刻度位置,再对应设置标签。

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

iters=100
A=np.arange(0,iters+1)/(iters)
B=np.arange(0,iters+1)/(iters)
C = np.zeros((len(A),len(B)))
for i in range(len(A)):
    for j in range(len(B)):
        C[j][i] = A[i] - B[j]
        
fig, ax = plt.subplots()
img = ax.imshow(C, cmap='hot', interpolation='none')
plt.colorbar(img)
ax.invert_yaxis()
ax.set_xlabel('A')
ax.set_ylabel('B')

# 关键步骤:先设置所有索引为刻度位置
ax.set_xticks(np.arange(len(A)))
ax.set_yticks(np.arange(len(B)))
# 再对应设置A、B的数值为标签
ax.set_xticklabels(A)
ax.set_yticklabels(B)

# 可选优化:标签密集时间隔显示并旋转
# ax.set_xticklabels(A[::10], rotation=45)
# ax.set_yticklabels(B[::10])

plt.show()

核心逻辑说明

  • imshow默认根据图像尺寸自动生成稀疏刻度,数量远少于A、B的元素个数,直接设置全量标签时,只有前几个能匹配到刻度位置,其余被丢弃。
  • 用set_xticks(np.arange(len(A)))指定数组的所有索引作为刻度位置,再用set_xticklabels(A)将每个位置对应到A的数值,就能实现全范围的标签匹配。

额外提示

如果A、B长度过大,全量显示标签会造成重叠,可通过切片(如A[::10])间隔选取标签,搭配rotation参数旋转标签,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:27:22