MATLAB:在“轴相等”的情况下,轴箱的确切尺寸和位置?

时间:2016-09-08 16:19:23

标签: matlab matlab-figure

如何知道轴箱的确切尺寸和位置(没有轴标签和数字)?例如,如果我使用

figure
contourf(x,y,u,100,'linestyle','none')
axis equal
set(gca,'position',[0.1,0.1,0.7,0.8]) %normalized units

在调整图形窗口大小(或使用axis equal)的情况下,轴框架/框的大小会有所不同,但get(gca,'position')的值保持不变。例如:

figure
Z = peaks(20);
contourf(Z,10)
set(gca,'Units','pixels')

get(gca,'position')
axis equal 
get(gca,'position')

ans =

0.1300    0.1100    0.7750    0.8150

axis equal之后,轴框会发生变化,但get(gca,'position')会给出相同的坐标: ans =

0.1300    0.1100    0.7750    0.8150

axis equal的情况下,我需要这些将颜色条与轴框对齐(它们之间有固定的间隙)。

1 个答案:

答案 0 :(得分:1)

当您致电axis equal时,轴框长宽比固定,Position属性被视为最大尺寸。调整图形窗口的大小时,轴框将保持在Position矩形的中心,但为了保持与之前相同的纵横比,它可能不占用整个Position矩形。

如果您希望它占据整个Position矩形,您可以再次致电axis equal。 (这可能取决于您的MATLAB版本;它在R2015b中适用于我。)

还会更详细地讨论on MATLAB Central

要回答你原来的问题,这有点复杂。您必须获得绘图框宽高比(使用pbaspect()或轴PlotBoxAspectRatio属性)并找出它:

ah = gca();
% Get the axes Position rectangle in units of pixels
old_units = get(ah,'Units');
set(ah,'Units','pixels');
pos = get(ah,'Position');
set(ah,'Units',old_units);
% Figure the PlotBox and axes Position aspect ratios
pos_aspectRatio = pos(3) / pos(4);
box_aspect = pbaspect(ah);
box_aspectRatio = box_aspect(1) / box_aspect(2);
if (box_aspectRatio > pos_aspectRatio)
    % PlotBox is wider than the Position rectangle
    box_height = pos(3) / box_aspectRatio;
    box_dy = (pos(4)-box_height) / 2;
    box_position = [pos(1), pos(2)+box_dy, pos(3), box_height];
else
    % PlotBox is taller than the Position rectangle
    box_width = pos(4) * box_aspectRatio;
    box_dx = (pos(3)-box_width) / 2;
    box_position = [pos(1)+box_dx, pos(2), box_width, pos(4)];
end

请注意,这将为您提供以像素为单位的框位置;如果你想在normalized单位作为轴默认值,你需要将其标准化:

fig_pos = get(get(ah,'Parent'),'Position');
box_position = box_position ./ fig_pos([3 4 3 4]);