如何为Matplotlib内置颜色映射(colormap)设置固定取值边界?
固定Matplotlib颜色映射的取值边界
嘿,这个问题解决起来超简单!你只需要在imshow()函数里加上vmin和vmax两个参数,就能强制颜色映射始终使用固定的最大值和最小值,完全不受输入数据本身极值的影响。
核心原理
vmin指定颜色映射对应的最小值,vmax指定对应的最大值。不管你的frame数组实际的最大值是20还是100,Matplotlib都会把数据按这个固定范围映射到colormap上:
- 小于等于
vmin的数值会对应colormap的最暗端(比如inferno的最黑部分) - 大于等于
vmax的数值会对应colormap的最亮端(比如inferno的最红部分) - 中间的数值会按比例映射到colormap的过渡色
修改后的代码示例
注意你原来的代码顺序有点小问题(应该先创建画布和轴,再绘制图像),调整后的完整代码如下:
import matplotlib.pyplot as plt # 先创建画布和坐标轴 fig, ax = plt.subplots() # 设置固定的颜色映射边界,这里以0-100为例,你可以根据需求修改数值 im = ax.imshow(frame, cmap='inferno', interpolation="bilinear", vmin=0, vmax=100) # 添加颜色条 fig.colorbar(im, ax=ax) # 显示图像 plt.show()
额外小技巧
如果你的数据存在超出vmin/vmax的数值,还可以在颜色条上添加截断标记,让读者知道有数据超出了显示范围:
# 在colorbar中添加extend参数,'both'表示上下都显示截断标记,也可以用'min'或'max' fig.colorbar(im, ax=ax, extend='both')
另外,也可以用im.set_clim(vmin=0, vmax=100)的方式来设置边界,效果和直接在imshow()里加参数完全一致。
内容的提问来源于stack exchange,提问作者John N.
相关产品推荐
相关产品推荐

