在matlab中以hh:mm格式在x轴上绘制一组随时间变化的数据

在matlab中以hh:mm格式在x轴上绘制一组随时间变化的数据,matlab,plot,Matlab,Plot,我有一个这样的代码: clc;clear;close all %% Time=linspace(16.8,17.8,230400)'; Field=linspace(50,145,230400)'; figure('units','normalized','outerposition',[0 0 1 1]) plot(Time,Field) %% figure('units','normalized','outerposition',[0 0 1 1]) hammng_wndw_size=

我有一个这样的代码:

clc;clear;close all
%% 
Time=linspace(16.8,17.8,230400)';
Field=linspace(50,145,230400)';
figure('units','normalized','outerposition',[0 0 1 1])
plot(Time,Field)
%% 
figure('units','normalized','outerposition',[0 0 1 1]) 
hammng_wndw_size=4096;
window=hamming(hammng_wndw_size); %window size
noverlap=512; % the noverlaps its the no. of points for repeating the window
nfft=4096; %size of fft
fs=32; %sampling freq
[Sp,F,T,P]=spectrogram(Field,window,noverlap,nfft,fs,'yaxis');
T_forspectrogrm=T./3600+Time(1);
surf(T_forspectrogrm,F,10*log10(P),'edgecolor','none','FaceColor','interp');
axis tight;ylim([0 4]);view(0,90);
colormap(jet);colorbar;
该图的结果是以下两个数字:

X轴是时间,y轴是其他量,比如说场。现在,当我绘图时,第一个图形的x轴从16.8到17.8,第二个图形的x轴从16.8到18.8,这实际上对应于16:48:00到17:48:00,第二个图形也是如此。如何修改程序以将x轴转换为hh:mm格式执行此操作

我试过用这种方式
timeinreqformat=datestr(Time(:,1),'HH:MM:SS')
,但这给了我一个字符串

我正在使用Matlab2016a


提前感谢

您的方法几乎是正确的。您需要使用
datetimes
。将十进制数转换为日期时间有点棘手

x = [16.8;17.8]

H = floor(x); % hour
m = floor((x-H)*60); % minute
S = (x-H)*60-m; % second
% create date vector
DateVec = datetime(0,0,0,H,m,S);

plot(DateVec,rand(size(DateVec)))
% set the tick format
xtickformat('HH:mm')

有许多选项可用于设置

如果您有unix时间,可以立即转换它

datetime(x,'ConvertFrom','datenum')

如果您只有时间,则需要为适当的
datetime
提供一个日期。另外,您也可以考虑使用
持续时间

亲爱的@Max,谢谢您抽出时间。在您建议的程序中,您已获取开始和结束时间,并将其转换为我需要的格式,大小为2 x 1,并将wrt打印为rand(大小(DateVec)。)在我的情况下,单元格大小不同,这会导致问题。此外,datetime函数创建日期11月30日--0001以及时间16:48:00。我不想显示日期——时间本身就足够了。此外,我不能使用“xtickformat”,因为它是在R2016b中引入的,我使用的是R2016a谢谢。