0

0

matplotlib 如何让 colorbar 只显示整数刻度

舞夢輝影

舞夢輝影

发布时间:2026-01-23 18:18:43

|

869人浏览过

|

来源于php中文网

原创

最简且健壮的方法是使用 MaxNLocator(integer=True),它自动选择视觉舒适的整数刻度,适配动态数据范围和图窗缩放,避免手动设 ticks 的越界、坐标错位及不响应重绘等问题。

matplotlib 如何让 colorbar 只显示整数刻度

colorbar 刻度强制为整数的最简方法

直接用 plt.colorbar(..., ticks=range(int(vmin), int(vmax)+1)) 最快,但前提是数据范围不大、且你已知 vminvmax。更稳妥的做法是让 matplotlib 自动算出合适的整数刻度,避免硬编码

  • 先获取当前 colorbar 的 ax(或通过 im.colorbar 拿到 Colorbar 对象)
  • 调用 cbar.set_ticks(np.arange(int(cbar.vmin), int(cbar.vmax)+1)),但注意:若 vmin/vmax 是浮点(比如 0.2–4.8),int() 会截断,应改用 np.floornp.ceil
  • 更推荐用 MaxNLocator(integer=True),它能自动适配显示区域宽度,避免刻度挤成一团

用 MaxNLocator(integer=True) 控制 colorbar 刻度

这是最健壮的方式,尤其适合动态数据或不确定范围的图。它不强行塞满所有整数,而是选“视觉上舒服的整数位置”,同时严格保证每个 tick 都是整数。

  • 导入:from matplotlib.ticker import MaxNLocator
  • 画完 colorbar 后加一句:cbar.ax.yaxis.set_major_locator(MaxNLocator(integer=True))(竖直 colorbar)或 cbar.ax.xaxis.set_major_locator(...)(水平)
  • 如果想限制最多显示 6 个刻度,传参 MaxNLocator(integer=True, nbins=6)
  • 注意:该方式对极小范围(如 vmin=1.9, vmax=2.1)可能只显示一个 tick(2),这是正常行为,不是 bug

为什么 set_ticks([...]) 容易出错

手动传整数列表看似直接,但实际常踩三个坑:

  • 传入的 list 若超出 colorbar 数据范围(比如 vmin=0.5, vmax=3.2 却传 [0,1,2,3,4]),matplotlib 会静默忽略越界值,导致顶部/底部无刻度线
  • 若数据是 log scale 或自定义 norm,set_ticks 传的仍是数据值,但 colorbar 内部坐标已变换,容易错位
  • resize 图窗后,手动设置的 ticks 不会自动重排,而 MaxNLocator 会响应

完整可运行示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MaxNLocator

data = np.random.randn(10, 10) * 2 + 1.5 # 均值约 1.5,范围大致 -2~5 im = plt.imshow(data, cmap='viridis') cbar = plt.colorbar(im)

关键:强制整数刻度

cbar.ax.yaxis.set_major_locator(MaxNLocator(integer=True))

Figstack
Figstack

一个基于 Web 的AI代码伴侣工具,可以帮助跨不同编程语言管理和解释代码。

下载

plt.show()

这行 cbar.ax.yaxis.set_major_locator(...) 是核心,其余都是常规绘图。如果 colorbar 是水平的(orientation='horizontal'),把 yaxis 换成 xaxis 即可。

真正要注意的是:别在 plt.colorbar(..., ticks=[...]) 里硬写死列表,除非你确定数据范围永远不变;动态场景下,MaxNLocator(integer=True) 才是那个“设一次就忘掉”的解法。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

358

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

542

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

9

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

19

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 15万人学习

Rust 教程
Rust 教程

共28课时 | 4.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号