如何在MATLAB中添加轴和图之间的间隙

时间:2016-02-17 00:17:19

标签: matlab-figure

我使用这样的代码在MATLAB 2015中制作一个图:

plot(rand(1,40))
box off
ax=gca;
ax.TickDir='out';
ax.TickLength=3*ax.TickLength;

What MATLAB gives by default]

我想在轴和图之间放一点距离,如下图所示,我用Photoshop制作:

What I want it to look like

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我可以想办法,但是:

  • 我不知道这是不是“正确”的方式。
  • 这仅适用于静态图像(例如,如果缩放/平移图形,边界不会相应地改变)。

您的想法是创建另外两个axes并指定其位置,使其远离您的数据,然后隐藏原始axes(完全或部分),这会产生所需的结果:

%% // Create axes and plot something:
figure();
hA(1) = axes;
hA(2) = copyobj(hA(1),gcf); 
hA(3) = copyobj(hA(1),gcf);
plot(hA(1),rand(1,40));
%% // Add the new axes:
%// Move them around
FRACTION_OF_POSITION = 0.6;
hA(2).Position(1) = FRACTION_OF_POSITION*hA(2).Position(1);
hA(3).Position(2) = FRACTION_OF_POSITION*hA(3).Position(2);
%// Change their style
hA(2).Color = 'none'; hA(3).Color = 'none';
hA(2).XTick = []; hA(3).YTick = [];
hA(2).XRuler.Axle.Visible = 'off';
hA(3).YRuler.Axle.Visible = 'off';
%% // Remove the box/ticks/labels of the original axes:
if true
%// Alternative 1 (Remove everything at once, including background):
  set(hA(1),'Visible','off')
else
%// Alternative 2 (Remove only certain elements):
  hA(1).Box = 'off';
  hA(1).XRuler.Axle.Visible = 'off';
  hA(1).YRuler.Axle.Visible = 'off';
end

结果是:

The result

其他注意事项:

  • 如果在绘图之前copyobj轴,则轴刻度值将是默认值 - 您可能不希望这样。您必须在绘图后手动设置刻度线和标签,或copyobj,然后删除line的{​​{1}}子对象。
  • 如果您想支持缩放/平移行为,可以使用linkaxes进行此操作。

积分:使用hA(2:3)的想法取自Dan here,后者又从UndocumentedMatlab获取。