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

如何在Matplotlib的imshow()中自定义Y轴刻度标签?

解决Matplotlib中替换imshow图像Y轴刻度标签的问题

当然可行,你之前遇到的问题核心是重复创建了独立的绘图对象——一边用plt.imshow()使用默认画布,另一边又通过fig, ax = plt.subplots()新建了另一个画布,两者的Axes对象不关联,导致标签设置无效还生成了两张图。

下面是两种正确的实现方式:

方式1:基于当前绘图Axes修改(适配你原有的代码逻辑)

import matplotlib.pyplot as plt
import numpy as np

# 定义你的非线性函数f,这里示例用x²+5,替换成你自己的函数即可
def f(x):
    return x ** 2 + 5

a = np.random.random((16,16))
plt.imshow(a)

# 获取当前正在使用的Axes对象
ax = plt.gca()
# 指定要保留的Y轴刻度位置(对应原numpy数组的索引:0、2……14)
ytick_positions = range(0, 16, 2)
# 生成对应的自定义标签
ytick_labels = [f(x) for x in ytick_positions]

# 先设置刻度位置,再绑定对应标签(顺序不能反)
ax.set_yticks(ytick_positions)
ax.set_yticklabels(ytick_labels)

plt.show()

方式2:从头创建画布和Axes(更规范的写法,避免混淆)

import matplotlib.pyplot as plt
import numpy as np

def f(x):
    return x ** 2 + 5

a = np.random.random((16,16))
# 一次性创建画布和Axes对象,后续所有绘图操作都基于这个ax
fig, ax = plt.subplots()
ax.imshow(a)

ytick_positions = range(0, 16, 2)
ytick_labels = [f(x) for x in ytick_positions]

ax.set_yticks(ytick_positions)
ax.set_yticklabels(ytick_labels)

plt.show()

关键注意事项

  • 必须先调用set_yticks()指定刻度位置,再用set_yticklabels()设置对应标签,顺序颠倒会导致标签错位。
  • 确保你的函数f接收的参数是刻度位置的数值(即0、2……14),输出为你需要的整数标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:42:40