matplotlib 如何让 colorbar 只显示整数刻度且字体大小合适

Matplotlib中colorbar显示整数刻度并调字体大小,需用cbar.set_ticks()设整数位置、cbar.set_ticklabels()转字符串标签,并用cbar.ax.tick_params(labelsize=10)统一调字号。

在 Matplotlib 中让 colorbar 只显示整数刻度并控制字体大小,关键在于手动设置刻度位置(set_ticks)和标签格式(set_ticklabels),同时用 tick_paramsfontsize 参数调整字体大小。

指定整数刻度位置

colorbar 本质是一个 Axes 对象,可通过 cbar.ax 获取其轴对象。先确定数据范围,再生成整数序列作为刻度位置:

  • np.arange(int(vmin), int(vmax)+1) 生成从最小整数到最大整数的数组
  • 注意:若 vmin/vmax 是浮点数,需用 int(np.floor(vmin))int(np.ceil(vmax)) 更稳妥
  • 调用 cbar.set_ticks(ticks) 设置刻度位置

确保刻度标签为整数且无小数点

即使刻度位置是整数,Matplotlib 有时仍会显示如 2.0。可显式设置字符串标签:

  • cbar.set_ticklabels([str(int(x)) for x in ticks])
  • 或更简洁地:cbar.set_ticklabels([f"{int(x)}" for x in ticks])
  • 避免用 FormatStrFormatter('%d')(对 colorbar 的 tick formatter 支持不稳定)

调整字体大小

有两种常用方式,推荐后者更直接:

  • cbar.ax.tick_params(labelsize=12) 统一设置刻度标签字号
  • 或逐个设置:遍历 cbar.ax.get_yticklabels() 并调用 set_fontsize(12)
  • 如果 colorbar 是水平方向(orientation='horizontal'),则用 get_xticklabels()tick_params(axis='x', labelsize=12)

完整示例代码

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randint(0, 10, (20, 20))
im = plt.imshow(data, cmap='viridis')
cbar = plt.colorbar(im)

vmin, vmax = data.min(), data.max()
ticks = np.arange(int(np.floor(vmin)), int(np.ceil(vmax)) + 1)
cbar.set_ticks(ticks)
cbar

.set_ticklabels([f"{int(x)}" for x in ticks]) cbar.ax.tick_params(labelsize=10) plt.show()