MATLAB更改数字到目前为止

时间:2013-06-21 18:02:28

标签: matlab date time

我有时间设置为序列日期。每个数字按顺序对应一天,从20100101到20130611.如何将序列日期转换为月份格式的日期?我需要这个,因为我想绘制数据并需要x轴来显示日期。

谢谢!

2 个答案:

答案 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