如何知道轴箱的确切尺寸和位置(没有轴标签和数字)?例如,如果我使用
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
的情况下,我需要这些将颜色条与轴框对齐(它们之间有固定的间隙)。
答案 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]);