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

20次阅读

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

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

在 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()

text=ZqhQzanResources