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

时间:2016-02-24 08:29:06

标签: image matlab graphics colorbar

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

我认为我不能使用轴子对象的顺序,因为每个轴显然只有一个子,即图像,而颜色条对象是图形的子对象(必须与其相同)相关轴)。

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

PS我也尝试重新排序图中的孩子,但他们不会改变(即使画家渲染)

1 个答案:

答案 0 :(得分:0)

这很奇怪:当我刚准备好MCVE时,问题没有重现,但我不知道有什么不同!也许Windows更新?无论如何,带有问题的原始输出显示在http://i.stack.imgur.com/LJVG2.png,并且准备好的示例输出看起来应该在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