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