[英]Plotting a set of data with time in hh:mm format in x axis in matlab
我有一个这样的代码:
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 格式来完成这项工作?
我以这种方式尝试了TimeInReqFrmat=datestr(Time(:,1),'HH:MM:SS')
,但这给了我一串字符。
我正在使用 Matlab 2016a。
提前致谢
你的方法几乎是正确的。 您需要使用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')
有很多选项可以设置xtickformat
。
如果你有 unix-time,你可以马上转换它
datetime(x,'ConvertFrom','datenum')
如果您有足够的时间,您将需要想出一个合适的datetime
。 否则你也可以考虑使用duration
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.