matplotlib多子图场景下如何调整colorbar位置且无需依赖imshow函数
不依赖imshow移动colorbar到指定子图的实现方案
不需要依托imshow函数即可实现需求,你当前使用ScalarMappable作为colorbar映射源的写法完全兼容,核心是调用fig.colorbar()时指定绑定的子图对象即可,具体方案如下:
方案1:自动对齐指定子图
调用colorbar时传入ax参数,参数值为你要挂载colorbar的目标子图对象,colorbar会自动从该子图的侧边切出空间放置,自动对齐子图高度,无需手动计算坐标。修改后的代码示例:fig,(axe1,axe2)=plt.subplots(2,1,figsize=(40,40)) axe1.barh(count['platform'],count['numbers'],0.8,color=color) axe2.barh(combine['platform'],combine['score'],color='pink') # 核心修改:传入ax参数指定绑定axe1,即可让colorbar对齐到第一个子图右侧 sm = cm.ScalarMappable(cmap='hsv',norm=col.Normalize(0,1)) fig.colorbar(sm, ax=axe1)如果需要colorbar对齐多个子图的总高度,可将
ax参数设置为子图列表,例如ax=[axe1, axe2]方案2:自定义colorbar精确位置
如果你需要灵活调整colorbar的位置、宽高,可先手动在画布上创建专属坐标轴区域放置colorbar,再通过cax参数传入colorbar方法即可,位置参数按画布宽高的比例设置,取值范围为0~1。示例代码:# 四个参数依次为 [left, bottom, width, height],可根据实际显示效果调整数值 cax = fig.add_axes([0.92, 0.5, 0.02, 0.35]) fig.colorbar(sm, cax=cax)
内容的提问来源于stack exchange,提问作者drew
相关产品推荐
相关产品推荐

