我将时间设置为连续日期。每个数字对应一天,按顺序从 20100101 到 20130611。如何将序列日期转换为月-年格式的日期?我需要这个,因为我想绘制数据并且需要 x 轴来显示日期。
谢谢!
第一步是将您的日期格式转换为标准的 Matlab 日期格式之一。用于绘图的最佳格式是“序列日期格式”。数字本身有点尴尬,因为它们代表“0/0/0000 之后的时间量,以天为单位”,这是一个巨大的数字。此外,这个日期实际上从未存在过,当您想要使用 BC 的日期时,这真的很奇怪。
但是,转换很容易,因为您的格式也计算天数,但您在 2009 年 12 月 31 日之后计算。您可以使用
numeric_date_vec = datenum(2009, 12, 31) + x;
然后,您使用
plot(numeric_date_vec, y)
你让Matlab通过调用自动添加日期刻度
datetick('mmm yyyy')
问题是,放大后刻度不会更新。您可以调用
datetick('mmm yyyy','keeplimits')
再次,在每次缩放或平移之后,或者您datetickzoom
从Matlab 文件交换中下载。它采用与 datetick 相同的参数,但它与缩放功能挂钩并自动更新刻度。
编辑:
有时,日期刻度没有以任何合理的方式间隔,然后您可以尝试放大和缩小一点,直到它捕捉到好的东西,或者您必须手动设置刻度:
% Set ticks to first day of the months in 2010
tick_locations = datenum(2012,[1:12],1);
% Set ticks on x-axis
set(gca, 'XTick', tick_locations)
% Call datetick again to get the right date labels, use option "keepticks"
datetick('mmm yyyy','keeplimits', 'keepticks')
您可能需要修改tick_locations = datenum(2012,[1:12],1)
a bit 以获得所需的刻度。例如,您可以使用
tick_locations = datenum(2012,[1:2:25],1)
在 2012 年 1 月到 2013 年 1 月之间每隔一个月获取一次。
n
用于天数
datestr(datenum(2009, 12, 31) + n, 'yyyy-mm')
例如
>> datestr(datenum(2009, 12, 31)+365, 'yyyy-mm')
ans =
2010-12
>> datestr(datenum(2009, 12, 31)+366, 'yyyy-mm')
ans =
2011-01