将毫秒转换为小时和绘图

Jay*_*ann 4 matlab plot time-series datetime-conversion

我正在尝试转换毫秒数组及其各自的数据.但是我希望在几小时和几分钟内完成.

Millis = [60000 120000 180000 240000....]
Power = [ 12 14 12 13 14 ...]
Run Code Online (Sandbox Code Playgroud)

我已将其设置为每分钟记录数据,因此60000 millis(= 1最小值).我试图在x轴上绘制时间并打开电源y.我希望以x小时和分钟显示轴,每个相应的功率数据对应于其各自的时间.

我试过这个

for i=2:length(Millis)
Conv2Min(i) = Millis(i) / 60000;
Time(i) = startTime + Conv2Min(i);
if (Time(i-1) > Time(i) + 60)
Time(i) + 100;
end

end
s = num2str(Time);
Run Code Online (Sandbox Code Playgroud)

这是为了将毫秒从几小时开始变为小时,从08:00开始,60分钟过去一直到09:00,这就是问题所在.我在08:59到09:00之间有差距.我也无法维持0=initial 0.

cod*_*tor 5

在这种情况下最好是有工作的datenum值,然后使用datetick设置你的刻度标记的格式plot'HH:MM'.

假设您开始进行测量t_1 = [HH_1, MM_1]并停止进行测量t_2 = [HH_2, MM_2].

生成datenum值数组的一个很酷的技巧是使用以下表达式:

time_datenums = HH_1/24 + MM_1/1440 : 1/1440 : HH_2/24 + MM_2/1440;
Run Code Online (Sandbox Code Playgroud)

说明:

我们正在创造一个规则隔开的载体time_datenums = A:B:C使用colon (:) operator,这里A是起点datenum值,B是之间的增量datenum值,并C为结束datenum值.

由于您的测量是每分钟(60000毫秒)进行的,因此datenum值之间的增量也应为1分钟.由于一天有24小时,每天1440分钟,所以B = 1/1440用作向量元素之间的增量,以获得1分钟的增量.

对于AC我们只需要将小时数除以24,将分钟数除以1440并将它们相加如下:

  • A = HH_1/24 + MM_1/1440
  • C = HH_2/24 + MM_2/1440

那么,例如,如果t_1 = [08, 00],那么A = 08/24 + 00/1440.就如此容易.

请注意,此过程根本不使用该datenum函数,但它仍然设法生成一个有效的datenum值数组,只考虑时间datenum,而不需要打扰日期datenum.您可以在这里这里了解更多相关信息.


回到原来的问题,让我们来看看代码:

time_millisec = 0:60000:9e6;             % Time array in milliseconds.
power = 10*rand(size(time_millisec));    % Random power data.

% Elapsed time in milliseconds.
elapsed_millisec = time_millisec(end) - time_millisec(1); 
% Integer part of elapsed hours.
elapsed_hours_int = fix(elapsed_millisec/(1000*60*60));
% Fractional part of elapsed hours.
elapsed_hours_frac = (elapsed_millisec/(1000*60*60)) - elapsed_hours_int;

t_1 = [08, 00]; % Start time 08:00
t_2 = [t_1(1) + elapsed_hours_int, t_1(2) + elapsed_hours_frac*60]; % Compute End time.

HH_1 = t_1(1); % Hour digits of t_1
MM_1 = t_1(2); % Minute digits of t_1

HH_2 = t_2(1); % Hour digits of t_2
MM_2 = t_2(2); % Minute digits of t_2

time_datenums = HH_1/24+MM_1/1440:1/1440:HH_2/24+MM_2/1440; % Array of datenums.

plot(time_datenums, power);    % Plot data.
datetick('x', 'HH:MM');        % Set 'HH:MM' datetick format for the x axis.
Run Code Online (Sandbox Code Playgroud)

这是输出:

在'HH:MM?中用日期刻度绘制情节? 格式