在 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
如何在 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