如何在AxesGrid布局中正确设置Colorbar的位置?
问题:为AxesGrid生成的子图添加底部共用色条
你当前的代码已经通过cbar_mode="single"和cbar_location="bottom"配置了共用色条的布局,问题出在色条的调用方式上。
你的原代码:
import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import AxesGrid mat = [[1,2],[3,4]] fig = plt.figure() grid = AxesGrid(fig, 111, nrows_ncols=(1,3), axes_pad=0.2, share_all=False, label_mode='L', cbar_location="bottom", cbar_mode="single") for ax in grid.axes_all: im = ax.imshow(mat) # plt.colorbar(im, cax=??) plt.show()
正确的修改方式
不需要手动纠结cax参数的取值,直接利用AxesGrid自带的色条轴对象即可:
- 因为设置了
cbar_mode="single",所有子图共用一个色条,只需要对其中一个图像对象调用色条生成方法 grid.cb_axes是色条轴的列表,取第一个元素就是底部的色条轴
修改后的完整代码:
import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import AxesGrid mat = [[1,2],[3,4]] fig = plt.figure() grid = AxesGrid(fig, 111, nrows_ncols=(1,3), axes_pad=0.2, share_all=False, label_mode='L', cbar_location="bottom", cbar_mode="single") # 遍历生成子图,保留任意一个图像对象即可 for ax in grid.axes_all: im = ax.imshow(mat) # 为共用色条轴添加色条 grid.cb_axes[0].colorbar(im) plt.show()
关键说明
- 你之前尝试
ax=grid.cb_axes无效,是因为grid.cb_axes是包含色条轴的列表,需要取索引[0]来获取具体的轴对象 - 由于所有子图显示的是同一数据范围的图像,共用色条完全合理;如果子图数据范围不同,可以调整
cbar_mode为"each"
内容的提问来源于stack exchange,提问作者gboffi
相关产品推荐
相关产品推荐

