MATLAB:每隔偶数个月进行一次Datetick

MATLAB:每隔偶数个月进行一次Datetick,matlab,Matlab,从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)

从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)

一定有更简单的方法

你知道日期勾选吗?例如:

% 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')

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

我刚刚绘制了一些随机数与日期的关系,作为示例:

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函数之前,您需要设置轴刻度。

好的,我将尝试一下。谢谢但如果将其扩展到每个月的滴答声,就意味着在年份向量中重复2008年11次,2009年11次,等等。有没有简单的方法来制作这个向量?@janon128:试试我的第二个例子。这正是它所做的:)它适用于每个标记一个数据点的时间序列?很抱歉,我在最初的问题中没有明确表示,我正在处理的时间序列已经有了“datenum”格式的时间组件。733408(对应于2008年1月1日)…等一直到2011年12月31日。