首页 > 解决方案 > 为子图设置一个公共颜色条

问题描述

我将通过 plt 模块绘制一个 numpy 数组。我不知道如何才能为我的子图提供一个共享的颜色条。或者即使它用两个绘图,我也想将它限制为仅在两个颜色条的 (-0.4-0.4) 范围内绘图。

谢谢大家这是我的代码:

from mpl_toolkits.axes_grid1 import make_axes_locatable
fig,(ax1,ax2) = plt.subplots(1,2,figsize=(10, 10))

im1 = ax1.imshow(input[:,:,141],cmap = 'Spectral_r')
divider = make_axes_locatable(ax1)
cax = divider.append_axes("right", size="5%", pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')

im2 = ax2.imshow(out_put[:,:,141], cmap = 'Spectral_r')
divider = make_axes_locatable(ax2)
cax = divider.append_axes("right", size="5%", pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical')
ax1.set_title('Input', fontsize = 16)
ax2.set_title('Output of model', fontsize = 16)
ax2.set_axis_off()
ax1.set_axis_off()


plt.show()

标签: matplotlibsubplotcolorbar

解决方案


您可以只调用colorbar一次,然后将两者都传递ax1,ax2ax. 对于该clim选项,我的 matplotlib 表示cb.set_clim已弃用。最好传递vmin,vmaximshow

fig,(ax1,ax2) = plt.subplots(1,2,figsize=(13, 5))

im1 = ax1.imshow(np.random.uniform(-1,1, size=(10,10)),
                 vmin=-0.4, vmax=0.4,
                 cmap = 'Spectral_r')

im2 = ax2.imshow(np.random.uniform(-1,1, size=(10,10)), 
                 vmin=-0.4, vmax=0.4,
                 cmap = 'Spectral_r')

cb = fig.colorbar(im2, ax=(ax1, ax2), orientation='vertical')
cb.set_clim(-0.4,0.4)

输出:

在此处输入图像描述


推荐阅读