Python 使用色条时如何保持图像大小?

Python 使用色条时如何保持图像大小?,python,image,matplotlib,plot,colorbar,Python,Image,Matplotlib,Plot,Colorbar,我正试图并排绘制同一幅图像的两个版本。当我为其中一幅图像绘制不带颜色栏的图形时,它似乎具有正确的大小: 但是,当我在左侧的图像中添加颜色栏时,它会以某种方式缩小图像: 下面是我注释掉颜色栏行的代码: def plot_amaps(self, anisotropy_map, parallel): timepoint = self.t * self.timestep amap_directory = self.directory + "amaps/"

我正试图并排绘制同一幅图像的两个版本。当我为其中一幅图像绘制不带颜色栏的图形时,它似乎具有正确的大小:

但是,当我在左侧的图像中添加颜色栏时,它会以某种方式缩小图像:

下面是我注释掉颜色栏行的代码:

def plot_amaps(self, anisotropy_map, parallel):
        timepoint = self.t * self.timestep
        amap_directory = self.directory + "amaps/"
        fig = plt.figure(facecolor='w', dpi=180)

        ax1 = fig.add_subplot(121)
        fig.subplots_adjust(top=0.85)
        ax1.grid(False)
        txt = "Mean(r) = %.3f SD(r)= %.3f t=%dmin"
        txt = txt %(self.mean, self.sd, timepoint)
        ax1.set_title(txt)

        amap = ax1.imshow(anisotropy_map, cmap="jet", clim = self.clim)
        #divider = make_axes_locatable(ax1)
        #cax = divider.append_axes('right', size='5%', pad=0.05)
        #fig.colorbar(amap, cax=cax)

        ax2 = fig.add_subplot(122)
        ax2.set_title("Intensity image", fontsize=10)
        ax2.imshow(parallel, cmap="gray")
        ax2.grid(False)
        ax1.axis('off')
        ax2.axis('off')

        if self.save is True:
            self.make_plot_dir(amap_directory)
            name = self.cell + "_time_"+str(timepoint)
            plt.savefig(amap_directory+name+self.saveformat, bbox_inches='tight')
        else:
            plt.show()
        plt.close('all')
我做错了什么,如何确保两个图像大小相同?

使用时

divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
你明确要求一个小5%的轴。因此,如果您不希望这样做,则不应使用
使轴可定位
为颜色条创建轴

相反,您可以使用在图形上的任意点创建轴

cax = fig.add_axes([left, bottom, width, height])
其中
左、下、宽、高
以数字单位表示,范围从0到1。然后将颜色条添加到其中。
如果你想在中间使用颜色条,你可以使用

预先创建一些空间。
plt.subplots_adjust(wspace=0.3)

当然,您必须对数字进行一些实验。

当您使用
附加轴()
时,它实际上减小了ax1的大小,以便为彩色贴图腾出空间。 如果要确保轴的大小不发生更改,则应显式创建轴。 以下是我的尝试:

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(1,3,width_ratios=[5,1,5])
fig = plt.figure(facecolor='w', dpi=180)

randomData = np.random.random(size=(100,100))

ax1 = fig.add_subplot(gs[0])
ax1.grid(False)
txt = "Mean(r) = %.3f SD(r)= %.3f t=%dmin"
txt = txt %(0, 0, 0)
ax1.set_title(txt)

amap = ax1.imshow(randomData, cmap="jet")
#divider = make_axes_locatable(ax1)
#cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(amap, cax=fig.add_subplot(gs[1]))

ax2 = fig.add_subplot(gs[2])
ax2.set_title("Intensity image", fontsize=10)
ax2.imshow(randomData, cmap="gray")
ax2.grid(False)
ax1.axis('off')
ax2.axis('off')

愚蠢的问题:如何减小色条的大小
fig.colorbar(amap,cax=fig.add_子图(gs[1]),shrink=.5)
返回错误。您是指垂直大小还是水平大小。对于水平尺寸,您可以在创建GridSpec时更改
宽度\u比率
。我做了
[5,1,5]
,这意味着图像的大小是色条的5倍,但您可以根据需要进行调整。对于垂直,我不确定,我看到我的解决方案提供了比您期望的输出更大的规模。在创建轴时,可能会传递一些填充选项,或者通过@ImportanceOfBeingErnest查看答案,您可以直接指定轴的大小。