我正在用MATLAB绘制一些数据,我想调整轴标签和轴本身之间的距离。但是,只需在标签的“位置”属性中添加一个位就会使标签移出图形窗口。是否有“保证金”属性或类似的东西?
在上图中,我想增加数字与标签“Time(s)”之间的距离,同时自动扩展数字大小,使标签不会超出范围。
这是我设置图形/轴的方式。
figure;
set(gca, ...
'Box' , 'off' , ...
'LooseInset' , get(gca, 'TightInset') * 1.5 , ...
'TickDir' , 'in' , ...
'XMinorTick' , 'off' , ...
'YMinorTick' , 'off' , ...
'TickLength' , [.02 .02] , ...
'LineWidth' , 1 , ...
'XGrid' , 'off' , ...
'YGrid' , 'off' , ...
'FontSize' , 18 );
答案 0 :(得分:8)
您可以通过调整轴的位置和xlabel来实现此目的。我还建议使用“标准化”单位,这样您的定位不依赖于数据范围。这是一个例子:
figure
plot(rand(1,10))
set(gca, 'Units', 'Normalized');
pos = get(gca, 'Position');
offset = 0.1;
set(gca, ...
'Box' , 'off' , ...
'LooseInset' , get(gca, 'TightInset') * 1.5 , ...
'TickDir' , 'in' , ...
'XMinorTick' , 'off' , ...
'YMinorTick' , 'off' , ...
'TickLength' , [.02 .02] , ...
'LineWidth' , 1 , ...
'XGrid' , 'off' , ...
'YGrid' , 'off' , ...
'FontSize' , 18 , ...
'Position' , pos + [0, offset, 0, -offset]);
h = xlabel('Time (s)');
set(h, 'Units', 'Normalized');
pos = get(h, 'Position');
set(h, 'Position', pos + [0, -offset, 0]);
答案 1 :(得分:8)
我写了一个应该完全符合你想要的功能。它使轴保持完全相同的大小和位置,它将x标签向下移动并将图形尺寸增大到足以显示标签:
function moveLabel(ax,offset,hFig,hAxes)
% get figure position
posFig = get(hFig,'Position');
% get axes position in pixels
set(hAxes,'Units','pixels')
posAx = get(hAxes,'Position');
% get label position in pixels
if ax=='x'
set(get(hAxes,'XLabel'),'Units','pixels')
posLabel = get(get(hAxes,'XLabel'),'Position');
else
set(get(hAxes,'YLabel'),'Units','pixels')
posLabel = get(get(hAxes,'YLabel'),'Position');
end
% resize figure
if ax=='x'
posFigNew = posFig + [0 -offset 0 offset];
else
posFigNew = posFig + [-offset 0 offset 0];
end
set(hFig,'Position',posFigNew)
% move axes
if ax=='x'
set(hAxes,'Position',posAx+[0 offset 0 0])
else
set(hAxes,'Position',posAx+[offset 0 0 0])
end
% move label
if ax=='x'
set(get(hAxes,'XLabel'),'Position',posLabel+[0 -offset 0])
else
set(get(hAxes,'YLabel'),'Position',posLabel+[-offset 0 0])
end
% set units back to 'normalized' and 'data'
set(hAxes,'Units','normalized')
if ax=='x'
set(get(hAxes,'XLabel'),'Units','data')
else
set(get(hAxes,'YLabel'),'Units','data')
end
end
在这种情况下,offset
应该是像素的绝对偏移量。如果你想要相对偏移,我认为这个函数很容易被重写。 hFig
是数字句柄,轴处理hAxes
。
编辑:在调用函数之前,使用hFig = figure;
和轴hAxes = axes;
创建图形(然后像设置问题中的那样设置轴:set(hAxes,...)
)。
EDIT2:添加'Units'
hAxes
和XLabel
分别更改为'normalized'和'data'的行。这样,在调整大小后,这个数字会保持你想要的状态。
EDIT3:修改了该功能,适用于X和Y标签。其他输入ax
应为'x'
或'y'
。
答案 2 :(得分:4)
我知道这已经得到了回答,但这在某种程度上是一种更简单的方式:
relative_offset = 1.5;
close all;
figure(99);clf
plot(rand(1,10))
xlabel('The x-axis')
xh = get(gca,'XLabel'); % Handle of the x label
pause(0.2)
set(xh, 'Units', 'Normalized')
pause(0.2)
pos = get(xh, 'Position');
set(xh, 'Position',pos.*[1,relative_offset,1])
我已经包含了暂停命令,因为我的系统会以某种奇怪的方式超越自身。
/尼尔斯