我想在 2008 年 1 月到 2011 年 1 月之间以月为间隔标记我的时间序列。

编辑:时间序列已经有 datenum 格式的时间组件:

733408 x1
733410 x2
etc...

我很抱歉在我对问题的原始陈述中没有明确说明这一点。

一个简单的每年两次的实现变得非常困惑:
years = [2008 2008 2009 2009 2010 2010 2011];
months = [1 7 1 7 1 7 1];
days = ones(1,7);
for k = 1:7
    dates(k) = datenum(years(k), months(k), days(k));
end
labels = datestr(dates,'mmm-yy');
set(gca,'XTick',dates);
set(gca,'XTickLabel',labels);

要将其扩展到每月刻度:
years = [2008 ...repeat10times 2009 ...repeat10times 2010 ...repeat10times 2011]
m = 1:11; months = repmat(m,1,3)
days = ones(1:34)

一定有更简单的方法!

最佳答案

在将序列日期编号转换为日期之前,您需要设置轴刻度。

我只是绘制了一些随机数与日期作为示例:

date1 = datenum([2012 01 01 00 00 00]);
date2 = now;
dateV = date1:date2; % x-axis data
y = rand(length(dateV),1); % y-axis data
hl = plot(dateV,y);
hax = get(hl, 'Parent'); % axes handle

通过像这样设置轴的 XTick 属性,将为 dateV 的每 30 个元素放置刻度。您可以更改它以适合您的滴答间隔。
set(hax, 'XTick', [dateV(1:30:end)]);
datetick('x', 24, 'keepticks'); 24 is a date format identifier. You can select a format from the datetick documentation.

正如 datetick 文档指出的那样,您需要在运行 datetick 函数之前设置轴刻度。

关于MATLAB:甚至每月一次的 Datetick,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13451067/

10-11 07:21