我想在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)
必须有一种更简单的方法!
答案 0 :(得分:5)
你知道datetick
吗?以你的例子:
% date (x-data)
years = [2008 2008 2009 2009 2010 2010 2011];
months = [1 7 1 7 1 7 1];
% do plot (NOTE: datenum is vectorized!)
plot( datenum(years, months,1), [your y-data] )
% set axis labels
datetick('x','mm-yyyy')
或者,更一般,
% generate periodic data
[years, months] = meshgrid(2008:2011, 1:12); % or whatever range you want
% do plot and set axes
plot( datenum(years(:), months(:), 1), [your y-data] )
datetick('x','mm-yyyy')
答案 1 :(得分:2)
在将序列号数转换为日期之前,您需要设置轴刻度。
我只是将一些随机数与日期作为例子绘制:
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函数之前设置轴刻度。