我使用这样的代码在MATLAB 2015中制作一个图:
plot(rand(1,40))
box off
ax=gca;
ax.TickDir='out';
ax.TickLength=3*ax.TickLength;
]
我想在轴和图之间放一点距离,如下图所示,我用Photoshop制作:
我该怎么做?
答案 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
结果是:
其他注意事项:
copyobj
轴,则轴刻度值将是默认值 - 您可能不希望这样。您必须在绘图后手动设置刻度线和标签,或copyobj
,然后删除line
的{{1}}子对象。linkaxes
进行此操作。 积分:使用hA(2:3)
的想法取自Dan here,后者又从UndocumentedMatlab获取。