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

如何在matplotlib中为图像子图添加自定义0-10范围的colorbar并修复报错

问题排查与实现方案

报错根因

  • Axes子图对象没有colorbar()方法,该方法属于Figure画布对象,直接调用ax.colorbar()会触发属性错误
  • 未给imshow指定vmin/vmax参数,无法固定数值映射范围为0-10
  • 画布创建完成后再修改plt.rcParams['figure.figsize']全局配置,不会对已生成的画布生效
  • 你使用的cmap='reds'写法错误,matplotlib内置红色系色卡名为大小写敏感的Reds,小写会触发色卡不存在报错

修正后可运行代码

import matplotlib.pyplot as plt
import matplotlib.image as image
import numpy as np

# 读取图像
image1 = image.imread('a.jpg')
image2 = image.imread('b.jpg')
image3 = image.imread('c.jpg')

# 【可选】如果原始图像数值不是0-10范围,先做缩放,比如jpg默认是0-255的话就用下面的代码
# image1 = image1 / 255 * 10
# image2 = image2 / 255 * 10
# image3 = image3 / 255 * 10

# 定义子图,直接在这里指定画布尺寸即可
fig1, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(20,4))

# 子图1
im1 = ax1.imshow(image1, extent=(60, 70, 23.5, 25.0), cmap='Reds', 
                 zorder=-1, aspect='auto', vmin=0, vmax=10)
ax1.xaxis.set_visible(False)
ax1.yaxis.set_visible(False)
# 给当前子图绑定独立colorbar
fig1.colorbar(im1, ax=ax1)

# 子图2
im2 = ax2.imshow(image2, extent=(60, 70, 23.5, 25.0), cmap='Reds', 
                 zorder=-1, aspect='auto', vmin=0, vmax=10)
ax2.xaxis.set_visible(False)
ax2.yaxis.set_visible(False)
fig1.colorbar(im2, ax=ax2)

# 子图3
im3 = ax3.imshow(image3, extent=(60, 70, 23.5, 25.0), cmap='Reds', 
                 zorder=-1, aspect='auto', vmin=0, vmax=10)
ax3.xaxis.set_visible(False)
ax3.yaxis.set_visible(False)
fig1.colorbar(im3, ax=ax3)

plt.tight_layout() # 自动调整布局避免colorbar挤压子图
plt.show()

实现效果说明

  • 每个子图右侧生成独立的colorbar,不会互相干扰
  • 所有colorbar数值范围统一固定为0-10,数值映射逻辑全局一致
  • 自动调整子图间距,避免colorbar和子图重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:05