В этом сценарии предпочтительнее работать со значениями 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;
Объяснение:
Мы создаем регулярно расположенный вектор time_datenums = A:B:C
, используя colon (:) operator
, где A
начальное значение datenum
, B
— это приращение между datenum
значениями, а C
— конечное значение datenum
.
Поскольку ваши измерения проводились каждую минуту (60000 миллисекунд), то приращение между datenum
значениями также должно составлять 1 минуту. Поскольку в сутках 24 часа, это составляет 1440 минут в день, поэтому используйте B = 1/1440
в качестве приращения между элементами вектора, чтобы получить приращение в 1 минуту.
Для A
и C
нам просто нужно разделить цифры часов на 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.
Это результат: