MATLAB作图笔记(2)

1、生成具有阴影区域的时间序列图

基本思路:

1)先绘制一个坐标系(图层1);
2)在图层1上添加阴影区域(图层2);
3)在图层2上添加时间序列曲线(图层3)。

2、作图代码

%%
CPI=xlsread('CPI_date3.xlsx',1,'B3:B392')';%1987年1月至2019年CPI数据
Q_CPI=1:length(CPI);

year=1987:2019;%年份
mon=1:12;%月份
date=cell(length(mon),length(year));%预分配内存——空元胞数组矩阵中用于存储自变量刻度标签(字符串)
[m,n]=size(date);
for ii=1:n;
    for jj=1:m;
        %将月度标签的字符串(例如:2005m3)存储在date中
        date{jj,ii}=[num2str(year(ii)), 'm', num2str(mon(jj))];
        tem=~cellfun(@isempty,date);%判断date中元素是否为[]
        if sum(sum(tem))==length(CPI);%如果循环过程中的X变量标签等于X变量的长度,则退出循环
            break
        end
    end
end

date_1=reshape(date,1,m*n);
tem2=~cellfun(@isempty,date_1);%判断元胞数组矩阵中的元素是否为空。
tem3=sort(tem2(find(tem2>0)));%find(tem2>0)找到tem2中元素大于0的个数所在的位置。
date_1(length(tem3)+1:end)=[];

%%
s=[20,40;%指定阴影部分在横轴上的区间
90,145;
235,255;
271,295];

axis tight
xl=xlim;%x轴刻度范围
yl=[-10,30];%y轴刻度范围

bottom=yl(1,1);
top=yl(1,2);
for ii=1:length(s)
    %ha为阴影面积图形句柄
    ha = area([s(ii,1) s(ii,2)], [bottom top-bottom; bottom top-bottom],...%指定阴影面积区域
        'FaceColor',[0.9 0.9 0.9],...%阴影面积图表明颜色
        'EdgeColor','white','ShowBaseline','off');%阴影面积图边缘颜色(白),隐藏基线
    set(ha(1), 'FaceColor', 'none') % 使得阴影部分底部区域不可见
    set(ha, 'LineStyle', '-')
    hold on %使用hold on保证循环过程中阴影面积不会被刷新掉
end
set(gca,'Layer','top')%将坐标轴线条置于阴影部分之上。

%%
P1=plot(Q_CPI,CPI,'r-','LineWidth',2);%用图形句柄表示CPI曲线图是为了在添加图例时抑制阴影部分图例
title('CPI(当月同比:%)')
legend(P1,'CPI');
xlim([1,length(CPI)]);

grid on
set(gca, 'GridAlpha',0.15);
set(gca,'xtick',[1:24:390]);%设置横坐标刻度
set(gca,'xticklabel',date_1(1:24:390));%设置横坐标刻度标签

3、效果图

阴影时间序列图.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容