MATLAB:(改进版)通过m文件去除图片空白区域(plot、subplot),设置大小并保存清晰图片

(原创文章,转载请注明出处。)

(本人使用的版本是matlab2018a)

针对matlab图片四周空白区域较大,直接进行保存再导入word后需要手动裁剪,因此希望使用matlab的m文件自动去除图片四周空白区域再进行保存。
我第一次解决方法的链接为:https://blog.csdn.net/robot301/article/details/82852006,因为该方法有一定缺点,遂进行改进。改进后的方法如下:
1.思路
MATLAB:(改进版)通过m文件去除图片空白区域(plot、subplot),设置大小并保存清晰图片_第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仍然会自动对图片左边区域空白进行调整,导致最左侧空白比预想的稍大一些,但影响很小,基本可忽略。
以下为验证的效果的对比:
四图结果:
MATLAB:(改进版)通过m文件去除图片空白区域(plot、subplot),设置大小并保存清晰图片_第2张图片
九图结果:
MATLAB:(改进版)通过m文件去除图片空白区域(plot、subplot),设置大小并保存清晰图片_第3张图片
二十五图结果:
MATLAB:(改进版)通过m文件去除图片空白区域(plot、subplot),设置大小并保存清晰图片_第4张图片

你可能感兴趣的:(matlab)