在 Matlab 中控制图像和颜色条的视觉堆叠顺序

Controlling visual stacking order of images and colour bars in Matlab

如何在 Matlab 中控制图像和颜色条的视觉堆叠顺序? 我有 6 张图像,使用子图在 2 x 3 网格上显示。我为每个图像添加了颜色条,但一些颜色条出现在图像后面,使它们不可见。在我的例子中,属于图像 3 和 5 的颜色条(在 subplot 命令中计算)出现在它们各自图像的后面。

我认为我无法使用轴的顺序 children objects,因为每个轴显然只有一个 child,即图像,和颜色条 object 是图的 child(必须与其关联的轴相同)。

我也尝试过 uistack(顶部用于彩条,底部用于图像),虽然它确实改变了外观,但最终,其他彩条将在图像后面结束。似乎是随机的,例如在属于子图 5 的图像和颜色条上 uistack 之后,子图 2 的颜色条会突然出现在其图像后面。

PS 我也尝试重新排序图的 children,但它们没有改变(即使有画家渲染)

很奇怪:我刚准备MCVE的时候,问题没有重现,但我不知道有什么不同!也许 Windows 更新?不管怎样,有问题的原始输出显示在这里 http://i.stack.imgur.com/LJVG2.png, and the prepared example output which looks as it should here http://i.stack.imgur.com/F1LMX.png。所以暂时没有问题...

密码是

function example()
I1=ones(96,96);
I2=ones(96,96)+1;
I3=ones(96,96)+2;
I4=ones(96,96)+3;
I5=ones(96,96)+4;
I6=ones(96,96)+5;


pos=[10 10 12 9];

fig=figure
fig.Units='centimeters';
fig.Position=pos;
set(gcf,'PaperPositionMode','auto');

   h(1)=veryTightSubPlot(2,3,1); 
   imshow(I1,[0,6]);
   h(2)=veryTightSubPlot(2,3,2);
   imshow(I2,[0,6]);
   h(3)=veryTightSubPlot(2,3,3);
   imshow(I3,[0,6]);

   h(4)=veryTightSubPlot(2,3,4); 
   imshow(I4,[0,6]);
   h(5)=veryTightSubPlot(2,3,5);
   imshow(I5,[0,6]);
   h(6)=veryTightSubPlot(2,3,6);
   imshow(I6,[0,6]);

V=[0.315,0.65,0.97,0.315,0.65,0.97,0.315,0.65,0.97];
for i=1:6
    p=get(h(i),'Position');
    c=colorbar(h(i),'Axislocation','in','FontSize',8);
    c.Color=[0,0,0];
    cp=c.Position;

    h(i).Position=p;
    cp(3)=cp(3)/2;
    c.Position=[V(i) cp(2:4)];
end
colormap(parula);
end

function [ax] = veryTightSubPlot(rows, columns,index)
    ix = mod(index-1,columns);
    iy = floor((index-1)/columns);
    pos = [ix/columns,1-(iy+1)/rows,1/columns,1/rows];
    ax = axes('ActivePositionProperty','outerposition','Position',pos);
end