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

Matplotlib绘制热力图色条显示数值范围 如何调整为仅显示单一值

问题描述

使用所有元素取值完全相同的数组T绘制热力图时,生成的colorbar(色条)默认会显示一段数值范围,需要调整设置让色条仅显示唯一值0.01109。

复现代码

import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib.pyplot as plt

T=np.array([[0.01109, 0.01109, 0.01109],
       [0.01109, 0.01109, 0.01109],
       [0.01109, 0.01109, 0.01109]])

fig, ax = plt.subplots()
im = ax.imshow(T)

divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)

plt.colorbar(im, cax=cax)
ax.set_title('\u03C3' ' ' "(N/m)")

异常效果

色条显示异常截图

解决方案

该现象的触发逻辑是:当传入imshow的数组所有值完全一致时,matplotlib会自动将颜色映射的数值范围向外扩展1个单位量级,导致色条显示一段区间而非单个值。
通过以下设置即可实现需求:

  • 调用imshow时显式指定vmin和vmax参数,将颜色映射范围设为紧邻目标值的极小区间,避免框架自动扩展范围,同时视觉上色条为纯色块
  • 调用colorbar时通过ticks参数指定仅显示目标值的刻度,可按需格式化刻度避免浮点显示误差

修改后的可运行代码:

import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib.pyplot as plt

T=np.array([[0.01109, 0.01109, 0.01109],
       [0.01109, 0.01109, 0.01109],
       [0.01109, 0.01109, 0.01109]])

fig, ax = plt.subplots()
# 提取数组唯一值,固定颜色映射范围为极小区间
target_val = T[0, 0]
im = ax.imshow(T, vmin=target_val - 1e-10, vmax=target_val + 1e-10)

divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)

# 指定色条仅展示目标值刻度
cb = plt.colorbar(im, cax=cax, ticks=[target_val])
# 统一刻度格式化规则,避免浮点显示偏差
cb.formatter.set_powerlimits((0, 0))
cb.update_ticks()

ax.set_title('\u03C3' ' ' "(N/m)")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:15:30