首页 > 解决方案 > datetime matlab不同的时间分辨率

问题描述

我试图在一张图中绘制两个时间序列。不幸的是,数据集具有不同的时间分辨率,我使用的代码datetime不起作用。我的目标是xtick每小时一个。知道如何解决这个问题吗?谢谢!

dataset1 = rand(1,230).';
dataset2 = rand(1,33).';

xstart = datenum('19/02 09:00','dd/mm HH:MM');
xend = datenum('21/02 18:00','dd/mm HH:MM');
x = linspace(xstart,xend,20);
Dat = linspace(xstart,xend,numel(dataset1));
x1=[1:1:230].' %values every 15 minutes


x0_OM = datenum('19/02 09:00','dd/mm HH:MM');
x1_OM = datenum('20/02 18:00','dd/mm HH:MM');
xData = linspace(x0_OM,x1_OM,20);
Dat2 = linspace(xstart,xend,numel(dataset2));
x2=[1:4:130].' %hourly values


fig=figure ();

yyaxis left
plot(x1,dataset1);
ylabel('Dataset 1')
xlabel('timesteps (15min Interval)');
yyaxis right
plot(x2,dataset2);
ylabel('Dataset 2')
set(gca,'XTick', xData) %does not work
datetick('x', 'dd/mm HH:MM', 'keeplimits','keepticks') %does not work

标签: matlabdatetimeplotresolutiontemporal

解决方案


我稍微概括了您的代码,并使用了比随机数更好的检查方法。我删除了标签部分以保持脚本简短。

% Dataset 1, 15 minutes interval
xstart1 = datenum('19/02 09:00','dd/mm HH:MM');
xend1 = datenum('21/02 18:00','dd/mm HH:MM');
Dat1 = xstart1:1/24/4:xend1;                           % 1/24/4 is a 15 minutes step
dataset1 = sin(linspace(0, 2*pi, numel(Dat1)));

% Dataset 2, 1 hour interval
xstart2 = datenum('19/02 09:00', 'dd/mm HH:MM');
xend2 = datenum('20/02 18:00', 'dd/mm HH:MM');
Dat2 = xstart2:1/24:xend2;                             % 1/24 is a 1 hour step 
dataset2 = cos(linspace(0, 2*pi, numel(Dat2)));

% Determine "global" start and end.
xstart = min(xstart1, xstart2);
xend = max(xend1, xend2);
Dat = xstart:1/24:xend;

% Plot
fig = figure();
hold on;
plot(Dat1, dataset1, '*');
plot(Dat2, dataset2, 'r*');
set(gca, 'XTick', Dat);
datetick('x', 'dd/mm HH:MM', 'keepticks', 'keeplimits');
hold off;

原则上,这应该可行,但由于长刻度标签,输出并不好。如果是这样,您能否检查一下您想要实现的目标?


推荐阅读