我正在尝试并排绘制同一图像的两个版本。当我为其中一个图像绘制没有颜色条的图形时,它似乎具有正确的尺寸:
但是当我在左边的图像中添加一个颜色条时,它会以某种方式缩小图像:
这是我已经注释掉色条线的代码:
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')
我做错了什么,如何确保两张图片大小相同?
答案 0 :(得分:1)
使用时
divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
你明确要求减少5%的轴。因此,如果您不希望这样,则不应使用make_axes_locatable
为
相反,你可以使用
在图上的任意点创建一个轴cax = fig.add_axes([left, bottom, width, height])
其中left, bottom, width, height
的数字单位为0到1.然后将颜色条添加到其中
如果您希望中间的颜色栏,您可以使用
plt.subplots_ajust(wspace=0.3)
当然,您需要对数字进行一些实验。
答案 1 :(得分:1)
当您使用append_axes()
时,它实际上会缩小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')