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
相关产品推荐
相关产品推荐

