matlab不显示子图刻度并调整子图间距

matlab中在使用subplot函数画图时,尤其是做emd分解查看IMF时,
正常画图的代码及结果如下:

figure
for i = 1:size(imf_norm,1)
    subplot(7,1,i)
    plot(imf_norm(i,:))
    ylabel('IMF'+string(i)) 
end

其中imf_norm为分解得到的imfs
效果图:
matlab不显示子图刻度并调整子图间距_第1张图片
可以发现有两个基本的需求,
1.不显示前面若干子图的刻度,只保留最后一个子图的刻度
2.子图之间的间距尽量紧凑

第一个需求比较好解决直接使用一行命令就可以实现

set(gca, 'XTickLabel', '')

但是调整子图之间的距离,如果使用subplot就不好调整了
我们可以借助另外一个函数subaxis实现,
很简单,只需要把subplot换成subaxis并把间距传给它就可以
代码如下

figure
space = 0.06; 
for i = 1:size(imf_norm,1)
    subaxis(7,1,i,'Spacing',space/3)
    plot(imf_norm(i,:))
    ylabel('IMF'+string(i))
    
    if i ~= size(imf_norm,1)
        set(gca, 'XTickLabel', '');
    else
        xlabel('Sample');
    end
    xlim([0 200])
end

效果如下:
matlab不显示子图刻度并调整子图间距_第2张图片
这样就好看了一些

如果想要给整个图添加一个大标题
可使用sgtitle函数
代码如下

figure
space = 0.06;
for i = 1:size(imf_norm,1)
    subaxis(7,1,i,'Spacing',space/3)
    plot(imf_norm(i,:))
    ylabel('IMF'+string(i))
    
    if i ~= size(imf_norm,1)
        set(gca, 'XTickLabel', '');
    else
        xlabel('Sample');
    end
    xlim([0 200])
end
sgtitle('大标题')

matlab不显示子图刻度并调整子图间距_第3张图片

你可能感兴趣的:(matlab)