通过Matlab所绘制的插图,如不进行一定的调整,其四周往往存在一定范围的白边。
白边的存在会影响数据展示效果,有时也会给论文的排版造成一定麻烦。
要想消除白边,一种简单的方法是,在导出插图后,用其它软件的‘裁剪’功能,手动裁掉白边。
然而,这一办法,处理一两张图片还好,一旦量多起来,那简直是灾难。
所以要想办法在源头解决问题,避免过多的机械劳动。
目前消除白边的思路主要有两种,一种是画布填充,一种是直接裁剪。
画布填充法作用于图片导出前,通过一定的手段使绘图区域填充整个画布,其优点在于导出图片后不会改变画布尺寸,但操作相对复杂。
直接裁剪法作用于图片导出过程中,通过一定的图片导出工具直接识别、裁剪画布中白边部分,其优点在于操作简单,但会导致画布尺寸的改变。
由于两种方法作用于不同的作图阶段,因此可以结合使用。
方法1
LooseInset是Matlab坐标轴的一个隐藏属性,其默认值是[0.13, 0.11, 0.095, 0.075],从而为刻度标记留出一定的空间。
若将其清零,则可以消除白边。
set(gca, 'LooseInset', [0,0,0,0]);
效果如下图所示:
方法2
另一种方法是结合TightInset属性与LooseInset属性。
Matlab中,坐标轴的Positon(蓝色),OuterPosition(红色)与TightInset(品红)范围如图所示。
set(gca,'LooseInset',get(gca,'TightInset'))
效果与1基本一致:
方法3
通过改变坐标区的‘Position’信息以消除白边。
set(gca, 'Position', get(gca,'OuterPosition') - ...
get(gca,'TightInset') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]);
方法4
在File>export setup中,选择‘Expand axes to fill figure’。
效果与上述三种方法效果类似。
方法5
有时候,会遇到坐标轴刻度间距一致(axis equal),且数据纵横坐标范围相差较大的情况。
比如这样:
或是这样:
左图没加‘axis equal’,右图加了‘axis equal’。其中,右图坐标区的空白可以用axis tight消除:
这时,若使用前述方法,往往只能在一个方向去掉白边。
主要原因在于窗口的尺寸是不变的,坐标区的纵横比又是锁定的。
所以,可以计算坐标区长度与宽度的比例,通过改变figure窗口尺寸以使坐标区填充画布:
pos=get(gcf,'Position'); % 获取窗口尺寸信息
pos(3)=pos(4)/3; %将窗口宽度设为高度的三分之一
set(gcf,'Position',pos) % 更新窗口尺寸
该方法对其它情况其实同样有效,只是窗口、坐标区尺寸的设置会麻烦些。
方法6
利用export_fig图片导出工具,在导出图片的同时可直接裁剪白边:
export_fig test.png -r300
方法7
利用exportgraphics函数,同样可以在导出图片的同时可直接裁剪白边:
exportgraphics(figureHandle,'test.png','Resolution',300)
其效果同export_fig类似。
以上。