Method 1: equate axis sizes for all axes after adding colorbar
Size of axes without a colorbar will be set to the size of axes with a colorbar.
imagesc(ax(i),rand(100,1000))
ax(end) = subplot(3,2,6);
plot(ax(end), 1:1000,(1:1000).*rand(1,1000)*2)
allAxPos = vertcat(ax.Position);
allAxPos(:,3:4) = min(allAxPos(:,3:4)).*ones(numel(ax),1);
set(ax,{'position'},mat2cell(allAxPos,ones(numel(ax),1),4))
Method 2: Restore axis position and set colobar positions
The axes maintain their original sizes prior to adding colorbar. The colorbar position and width is adjusted.
function addOutsideColorbar(ax)
cb = colorbar(ax,'EastOutside');
cb.Position(1) = sum(ax.Position([1,3]))+.01;
cb.Position(3) = cb.Position(3).*.5;
Demo
imagesc(ax(i),rand(100,1000))
addOutsideColorbar(ax(i))
ax(end) = subplot(3,2,6);
plot(ax(end), 1:1000,(1:1000).*rand(1,1000)*2)
Method 3: Use tiledlayout
imagesc(ax(i),rand(100,1000))
plot(ax(end), 1:1000,(1:1000).*rand(1,1000)*2)
Best Answer