(原创文章,转载请注明出处。)
(本人使用的版本是matlab2018a)
针对matlab图片四周空白区域较大,直接进行保存再导入word后需要手动裁剪,因此希望使用matlab的m文件自动去除图片四周空白区域再进行保存。
我第一次解决方法的链接为:https://blog.csdn.net/robot301/article/details/82852006,因为该方法有一定缺点,遂进行改进。改进后的方法如下:
1.思路
如上图所示:
图片宽度=1 =坐标轴宽度Xsubplot列数+TightInset边界宽度之和+左边留白+右边留白+列与列之间的空白间隙X(subplot列数-1)
图片高度=1 = 坐标轴高度Xsubplot行数+TightInset边界高度之和+下边留白+上边留白+行与行之间的空白间隙X(subplot行数-1)
通过给定图片左边、下边、右边、上边留白,以及行与行列与列之间的空白间隙,以及保持原始图的TightInset边界不变,将多余的面积分配给各个subplot子图的,就可以计算出每个subplot子图的坐标轴宽度和高度了。
2.函数程序
写成函数,程序如下:
function [] = FcnRemoveWhiteSpaceV5(Hgcf,Axes)
%***********************************************************************
%函数说明:通过调整figure中坐标轴大小和位置,消除figure的空白区域最小
%参数: Hgcf 图片figure的句柄
% Axes 图片中各子图subplot的坐标轴句柄
%***********************************************************************
%------------给定图片四周留白,以免图片消除空白后内容显得太局促------------------
MarginLeft=0.01;
MarginBottom=0.01;
MarginRight=0.01;
MarginTop=0.01;
%------------给定行与行、列与列的TightInset边界之间的间隙------------------
GapRow=0.0;
GapCol=0.0;
%--------------自动获得subplot的行列数------------------------
Dimensions=size(Axes);
Nrow=Dimensions(1);
Ncol=Dimensions(2);
%-----------------------获得每个坐标轴的TightInset的大小及坐标轴之间的最小间距-------------------------
%计算并存储列与列之间的TightInset
TightInsetSpaceCol=zeros(Nrow,Ncol+1); %定义各列之间的TightInset间距存储矩阵
for j=1:Ncol+1
for i=1:Nrow
if(j==1)
TightInsetSpaceCol(i,j)=Axes(i,1).TightInset(1);
elseif(1
3.验证程序及结果
clc
close all
clear all
%-------------四图验证----------------------
Hgcf=figure('color','w');
subplot(221),plot(1:4,5000:5003),ylabel('αβμνλΨ');;AX(1,1)=gca;
subplot(222),plot(1:4,50:53),ylabel('图2'),;xlabel('t(s)');AX(1,2)=gca;
subplot(223),plot(1:4,50:53),ylabel('2'),,xlabel('t(s)'),AX(2,1)=gca;
subplot(224),plot(1:4,5000:5003),ylabel('Ψ'),AX(2,2)=gca;
%-------------九图、二十五图验证省略----------------------
%。。。。。。。。。。。。。。。。。。。
%--------------保存原始图片(空白区域大)----------------------
set(Hgcf, 'PaperPositionMode', 'auto');
print(Hgcf,'-dtiff','-r300','原始图片.png');
%--------------设置所需图片大小----------------------
set(Hgcf,'units','pixel');
set(Hgcf,'position',[300 50 800 600])
%--------------消除空白区域----------------------
FcnRemoveWhiteSpaceV6(Hgcf,AX);
%--------------保存修改后的图片----------------------
set(Hgcf, 'PaperPositionMode', 'auto');
print(Hgcf,'-dtiff','-r300','修改后的图片.png');
该方法仍然存在很小的问题:由于matlab仍然会自动对图片左边区域空白进行调整,导致最左侧空白比预想的稍大一些,但影响很小,基本可忽略。
以下为验证的效果的对比:
四图结果:
九图结果:
二十五图结果: