繁体   English   中英

在 matlab 的 x 轴上以 hh:mm 格式绘制一组数据

[英]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;

这个 plot 的结果是这两个数字: 阴谋 频谱图

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM