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

3张子图:前两张共享colorbar、第三张单独设置及cax参数解析

问题1:实现前两个子图共享一个colorbar,第三个子图独立使用colorbar

要实现这个需求,你需要跟踪每个子图imshow的返回对象,分别为前两个子图和第三个子图创建colorbar,同时调整画布布局给两个colorbar留出空间。修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

# 创建子图并保存imshow的返回对象
plt.subplot(311)
im1 = plt.imshow(np.random.random((100, 100)))
plt.subplot(312)
im2 = plt.imshow(np.random.random((100, 100)))
plt.subplot(313)
im3 = plt.imshow(np.random.random((100, 100)))

# 调整子图布局,给右侧两个colorbar预留空间
plt.subplots_adjust(bottom=0.1, right=0.7, top=.9)

# 为前两个子图创建共享colorbar,位置覆盖前两个子图的垂直范围
cax_shared = plt.axes([0.75, 0.3, 0.075, 0.6])
plt.colorbar([im1, im2], cax=cax_shared)

# 为第三个子图创建独立colorbar,位置对应其垂直范围
cax_single = plt.axes([0.75, 0.1, 0.075, 0.18])
plt.colorbar(im3, cax=cax_single)

plt.show()

关键说明:

  • 保存imshow()的返回值是核心,这是绑定colorbar与对应子图的依据
  • 通过plt.axes()手动指定两个colorbar的位置,确保共享colorbar覆盖前两个子图的高度,独立colorbar匹配第三个子图的位置
  • 调整subplots_adjust的right参数,避免子图与colorbar重叠
问题2:cax参数的作用与取值依据
  • cax的作用:它是colorbar()函数用来指定colorbar绘制位置的坐标轴对象。如果不指定cax,matplotlib会自动调整布局并生成colorbar的坐标轴,但手动指定cax可以精确控制colorbar的位置、大小,适配多子图、多colorbar的复杂场景。

  • 取值依据:plt.axes([left, bottom, width, height])的参数是归一化的画布坐标(范围0到1,对应整个画布的比例):

    • left:colorbar左侧边缘距离画布左侧的比例(比如0.85表示在画布85%宽度的位置)
    • bottom:colorbar底部边缘距离画布底部的比例
    • width:colorbar宽度占画布总宽度的比例
    • height:colorbar高度占画布总高度的比例

原示例中的[0.85, 0.1, 0.075, 0.8]意思是:在画布右侧15%的位置放置colorbar,底部从画布10%高度处开始,宽度占画布的7.5%,高度占画布的80%,刚好覆盖三个子图的垂直范围。

内容的提问来源于stack exchange,提问作者J. O'connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:14