在Matlab中将图形调整为轴位置

时间:2013-01-02 13:07:50

标签: matlab matlab-figure

我有一个带有条形图的图形,我删除了所有的标记和标题,所以现在只显示条形图。我想让这个数字缩小到条形图的大小。 我尝试了以下内容:

set(gca,'Units', 'Pixels');  
set(gca,'XLim', [0.5 10.5],'YLim', [0 1],'Units', 'Pixels');
a=get(gca, 'Position');
set(gcf, 'Units', 'Pixels');
b=get(gcf,'Position');
set(gca, 'DataAspectRatioMode', 'manual', 'XLimMode', 'manual','YLimMode', 'manual')
set(gca, 'Position', [5,5,a(3),a(4)]);
set(gcf, 'Position', [10,10, a(3)+10,a(4)+10]);

然而,这不起作用。经过一些调查后,我发现主要问题是轴没有与轴尺寸对齐。 有没有办法解决这个问题而不计算图中每个地块的大小? 我想减少下图周围的空白区域: original figure 这是运行我的代码后的数字,仍然有很多空间,这是因为这是轴的大小:

figure after code has run

由于

编辑:问题源于轴大小,如下图所示,上图是DataAspectRatio设置为[1 1 1]而下图是没有(自动模式)。请注意,轴的大小不会改变(以黑色方块表示) *由于打开的绘图工具有一些变化,这些工具将图形停靠。 figure with manual aspect ratio figure with automatic aspect ratio

1 个答案:

答案 0 :(得分:0)

有帮助吗?

f = figure;

% generate bar
y = [75.995,91.972,105.711,123.203,131.669,...
       150.697,179.323,203.212,226.505,249.633,281.422];
bar(y);
% end of graph  

axis tight;
allAx = findall(f,'type','axes');
pa = get(gca, 'Position');
pf = get(f, 'Position');
% change shape of the figure to match                                                                                         
% xsize(figure)/yszie(figure) = xsize(axis)/ysize(axis)                                                                       
pf(4) = ((pf(3)-pf(1))*pa(4)+pa(2)*(pf(1)-pf(3))+pf(2)*pa(3)-pa(1)*pf(2))/(pa(3)-pa(1));
set(allAx, 'Units', 'Normalized', 'Position', [0, 0, 1, 1]);
set(f, 'Position', pf);