如何用日期标记x轴?

时间:2015-03-23 17:01:15

标签: matlab plot matlab-figure

我似乎无法弄清楚如何在Matlab中绘制不按数字顺序排列的日期。我需要的日期是从1月22日到2月1日,但是当我把它放在Matlab中时,它从1开始按数字顺序排列。所以我想知道如何获得它,以便按照我的列表顺序排列。

以下是我制作的代码:

date = [22 23 24 25 26 27 28 29 30 31 1 2 3 4];
in_bed = [3 8 26 76 225 298 258 233 189 128 68 29 14 4];
convalescent = [0 0 0 0 9 17 105 162 176 166 150 85 47 20];
plot(date,in_bed,'*',date,convalescent,'*')
xlabel('Janurary -- Feburary')
ylabel('Number of Cases')
legend('Confined to bed','Convalescent')
title('Influenza Outbreak')

3 个答案:

答案 0 :(得分:3)

您是否考虑过使用实际的date format?这样你的时间参数就按时间顺序排列。

首先做一些准备工作:

days = [22 23 24 25 26 27 28 29 30 31 1 2 3 4];
months = [1 1 1 1 1 1 1 1 1 1 2 2 2 2];
year = repmat(2015,numel(days),1);

in_bed = [3 8 26 76 225 298 258 233 189 128 68 29 14 4];
convalescent = [0 0 0 0 9 17 105 162 176 166 150 85 47 20];

创建datevec(日期向量)

dateVector = [year(:) months(:) days(:)];

并使用datenum将其转换为double值:

date = datenum(dateVector); 

绘制并修复x-ticks

plot(date,in_bed,'*',date,convalescent,'*')
set(gca,'XTick',date)  %// if you leave this step, labeling is dynamic!

使用datetick定义标签的格式:

datetick('x','dd-mm','keepticks')

和voilà: enter image description here

答案 1 :(得分:2)

检查以下链接:http://www.mathworks.com/help/matlab/ref/datetick.html

ax1.XTick = xData;
datetick(ax1,'x','mm','keepticks')

ax2.XTick = xData;
datetick(ax2,'x','mmm','keepticks')

答案 2 :(得分:2)

首先,在xData中使用以下date代替plot

startDate = datenum('01-22-2014');
endDate = datenum('02-04-2014');
xData = linspace(startDate, endDate, endDate - startDate + 1);

然后,使用datetickkeeplimits选项设置滴答:

datetick('x','mm-dd-yyyy','keeplimits');