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

Millis = [60000 120000 180000 240000....]
Power = [ 12 14 12 13 14 ...]

我已经设置好了,所以数据每分钟记录一次,因此60000millis(=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);

这试图将毫秒转换为从08:00开始的小时,并且一旦60分钟过去到09:00,问题就出现了我在08:59和09:00之间有一段时间我也不能维护0=initial 0

最佳答案

在这种情况下,最好使用datenum值,然后使用datetickplot的刻度标签格式设置为'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;

说明:
我们正在使用time_datenums = A:B:C创建一个规则间隔的向量colon (:) operator,其中A是起始值,datenumB值之间的增量,datenum是结束值。
由于您的测量每分钟(60000毫秒)进行一次,因此C值之间的增量也应为1分钟由于一天有24小时,即每天1440分钟,因此使用datenum作为向量元素之间的增量,以获得1分钟的增量。
对于datenumB = 1/1440我们只需要将小时数除以24,将分钟数除以1440,然后这样求和:
A
C
例如,如果A = HH_1/24 + MM_1/1440,那么C = HH_2/24 + MM_2/1440就这么简单。
注意,这个过程根本不使用t_1 = [08, 00] function,它仍然设法生成一个有效的A = 08/24 + 00/1440值数组,只考虑datenum的时间,而不需要关心datenum的日期您可以进一步了解herehere
回到最初的问题,让我们看看代码:
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.

这是输出:
matlab - 将毫秒转换为小时并绘图-LMLPHP

08-24 12:25