如何用日期标记x轴?

Sof*_*une 3 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')
Run Code Online (Sandbox Code Playgroud)

the*_*alk 5

您是否考虑过使用实际日期格式?这样你的时间参数就会按时间顺序排列。

首先做一些准备:

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];
Run Code Online (Sandbox Code Playgroud)

创建一个datevec(日期向量)

dateVector = [year(:) months(:) days(:)];
Run Code Online (Sandbox Code Playgroud)

并将其转换为双精度值datenum

date = datenum(dateVector); 
Run Code Online (Sandbox Code Playgroud)

绘制并修复 x-ticks

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

定义标签的格式datetick

datetick('x','dd-mm','keepticks')
Run Code Online (Sandbox Code Playgroud)

瞧: 在此处输入图片说明