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

如何创建带文本标签的自定义独立matplotlib colorbar并解决标签错位问题

问题原因

默认ListedColormap的数值映射范围是[0,1],你设置的0-7刻度超出了默认范围,导致标签和色块无法对齐。要实现一一绑定,需要显式定义数值边界,让每个色块对应固定的数值区间,再把标签放在色块中心位置。

正确实现代码
import matplotlib.colorbar as colorbar
import matplotlib.colors as clr
import matplotlib.pyplot as plt

cb_colors = ["#000000", "#808000", "#D3D3D3", "#FFFFFF", "#000080", "#FF4500", "#696969", "#FFFFE0"]
cb_labels = ["A", "B", "C", "D", "E", "F", "G", "H"]
cmap_ = clr.ListedColormap(cb_colors)

# 1. 定义颜色边界:8个颜色对应9个边界,每个颜色对应一个1单位宽度的区间
bounds = list(range(len(cb_colors)+1))
# 2. 用BoundaryNorm将数值区间和颜色一一映射
norm = clr.BoundaryNorm(bounds, cmap_.N)

fig = plt.figure()
ax = fig.add_axes([0.05, 0.80, 0.9, 0.1])

# 3. 创建colorbar时传入自定义norm
cb = colorbar.ColorbarBase(ax, orientation='horizontal', 
                           cmap=cmap_,
                           norm=norm)

# 4. 刻度设置在每个色块的中心位置
cb.set_ticks([x + 0.5 for x in range(len(cb_colors))])
cb.set_ticklabels(cb_labels)

plt.show()
修改点说明
  • 新增BoundaryNorm规则:将每个颜色绑定到长度为1的连续区间,避免默认0-1范围和自定义刻度不匹配的问题
  • 刻度设置在每个颜色区间的中心位置,保证标签正好落在对应色块的正下方

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:02