0

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

谢谢!

4

2 回答 2

2

第一步是将您的日期格式转换为标准的 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')

再次,在每次缩放或平移之后,或者您datetickzoomMatlab 文件交换中下载。它采用与 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 月之间每隔一个月获取一次。

于 2013-06-21T18:42:21.910 回答
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
于 2013-06-21T18:25:43.050 回答