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

Matplotlib中为1×5子图的后3张子图添加单个色条的问题

解决1×5子图中后三张图像共享色条的问题

我来帮你搞定这个共享色条的问题!你当前的代码只给最后一张输出图单独添加了色条,既没法实现三个输出图共用同一条色条,还容易导致布局错乱。下面是修正后的完整方案:

核心问题分析

你的代码里plt.colorbar()默认只关联最后一次imshow()返回的图像对象,而且没有指定要关联的子图范围,所以无法让前两张输出图和这个色条对应。另外,直接添加色条会挤占最后一个子图的空间,破坏整体布局。

修正后的代码

import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt

# 创建1行5列的子图,返回画布和子图数组
fig, axes = plt.subplots(1, 5, figsize=(15, 4))

# 第一张:灰度图像(0-255)
im1 = axes[0].imshow(image, cmap='gray')
axes[0].axis('off')

# 第二张:标签图像(0-2)
im2 = axes[1].imshow(label, cmap='gray')
axes[1].axis('off')

# 第三到第五张:浮点输出图像,统一设置vmin和vmax确保颜色范围一致
vmin, vmax = -3, 10
im3 = axes[2].imshow(output1, vmin=vmin, vmax=vmax)
axes[2].axis('off')

im4 = axes[3].imshow(output2, vmin=vmin, vmax=vmax)
axes[3].axis('off')

im5 = axes[4].imshow(output3, vmin=vmin, vmax=vmax)
axes[4].axis('off')

# 为后三张子图添加共享色条
# 指定ax=axes[2:],让色条关联这三个子图,自动放在它们的右侧
fig.colorbar(im5, ax=axes[2:], shrink=0.8, pad=0.05)

plt.tight_layout()
plt.show()

关键调整说明

  • 使用plt.subplots()统一管理子图:通过返回的axes数组可以更精准地控制每个子图,避免多次调用plt.subplot()的混乱。
  • 统一颜色范围:给三个输出图设置相同的vmin和vmax,确保它们的颜色映射完全对应同一条色条。
  • 共享色条的正确实现:调用fig.colorbar()时,指定ax=axes[2:],告诉matplotlib这个色条属于后三个子图,它会自动调整布局,把色条放在这三个子图的右侧,不会影响前两个子图。
  • 布局优化:shrink参数调整色条的长度,pad参数控制色条和子图之间的间距,plt.tight_layout()自动调整所有子图的间距,让整体布局更美观。

如果想要把色条放在子图下方(水平方向),可以修改色条的orientation参数:

fig.colorbar(im5, ax=axes[2:], shrink=0.6, orientation='horizontal', pad=0.1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:00:46