我有时间设置为序列日期。每个数字按顺序对应一天,从20100101到20130611.如何将序列日期转换为月份格式的日期?我需要这个,因为我想绘制数据并需要x轴来显示日期。
谢谢!
答案 0 :(得分:2)
第一步是将日期格式转换为standard Matlab date formats之一。用于绘图的最佳格式是“序列日期格式”。数字本身有点尴尬,因为它们代表“在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')
再次,在每次缩放或平移后,或者从Matlab file exchange下载datetickzoom
。它采用与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)
以获得所需的刻度。例如,您可以使用
tick_locations = datenum(2012,[1:2:25],1)
在2012年1月至2013年1月之间获得每两个月一次。
答案 1 :(得分:0)
对于日期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