You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用datenum处理年份数组及自定义英国衰退期绘制衰退图?

解决方案

我来帮你解决这两个问题,刚好我之前也处理过类似的时间序列和衰退标注需求:

1. 用datenum转换年份数组

你的Year是113×1的年份数组(1900-2012),Matlab的datenum函数可以直接将年份转换为日期序列号,默认取当年的1月1日作为对应日期(如果你的数据是年度数据,这个处理完全够用)。具体代码如下:

% 假设你的年份数组名为Year(113×1)
date_num = datenum(Year, 1, 1);

解释一下:datenum(year, month, day)接受三个参数,这里我们统一传入1月1日,这样每个年份都会被转换成当年第一天的日期序列号,后续绘图时就能正确识别时间轴顺序了。

如果你的数据是年度平均值,也可以用年中日期(比如7月1日)来转换,代码改成:

date_num = datenum(Year, 7, 1);

2. 自定义英国衰退时间段(替代默认NBER数据)

recessionplot默认调用的是美国NBER的衰退数据,要标注英国的衰退,有两种实用方法:

方法一:直接给recessionplot传入自定义衰退起止日期

首先你需要确认英国官方(比如ONS)定义的衰退时间段,比如假设已知的英国衰退年份是[1920-1921]、[2008-2009]等(请替换为实际权威数据)。然后将这些起止年份转换为datenum格式,再传给recessionplot:

% 定义英国衰退的起止年份(每行一个衰退周期)
uk_recession_periods = [1920 1921; 2008 2009];

% 转换为datenum格式的起止日期(这里取年份的第一天和最后一天)
start_dates = datenum(uk_recession_periods(:,1), 1, 1);
end_dates = datenum(uk_recession_periods(:,2), 12, 31);

% 先绘制你的经济数据(比如GDP)
plot(date_num, GDP_data); % date_num是之前转换的日期序列号,GDP_data是你的数据数组
hold on;

% 调用recessionplot绘制自定义衰退阴影
recessionplot(start_dates, end_dates);
hold off;

方法二:手动用fill函数绘制阴影(更灵活)

如果觉得recessionplot的自定义参数不够灵活,直接用fill函数绘制灰色阴影是更简单的方式,不需要依赖内置函数的限制:

% 先绘制你的经济数据
plot(date_num, GDP_data);
hold on;

% 定义英国衰退时间段
uk_recessions = [1920 1921; 2008 2009];

% 遍历每个衰退周期,绘制阴影
for i = 1:size(uk_recessions, 1)
    % 转换起止日期为datenum
    start_date = datenum(uk_recessions(i,1), 1, 1);
    end_date = datenum(uk_recessions(i,2), 12, 31);
    
    % 获取y轴的范围,确保阴影覆盖整个绘图区域
    y_min = min(GDP_data);
    y_max = max(GDP_data);
    
    % 绘制灰色半透明阴影
    fill([start_date, end_date, end_date, start_date], ...
         [y_min, y_min, y_max, y_max], ...
         'gray', 'FaceAlpha', 0.3, 'EdgeColor', 'none');
end

hold off;

这种方法的好处是你可以自由调整阴影的颜色、透明度,甚至针对不同衰退周期设置不同样式,完全不受内置函数的限制。

内容的提问来源于stack exchange,提问作者BenBernke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:52