繁体   English   中英

在MATLAB中绘制时间序列数据

[英]Plotting timeseries data in MATLAB

我有一个包含两列数据的矩阵。 第一列具有以UNIX时间指定的时间戳,第二列具有相应的数据集。

我正在尝试在底轴上绘制具有人类可读时间的DATA

我已经绘制了原始数据,如下所示:

plot(DATA(:,1), DATA(:,2));

我知道MATLAB中有一个timeseries()函数,但似乎无法正常工作。 我应该能够按照MATLAB文档来绘制数据。

我尝试将第一列声明为时间序列:

TS = timeseries(DATA(:,1));

然后,我尝试绘制数据,如下所示:

plot(TS, DATA(:,1));

尽管这种方法似乎很合理,但是我得到以下错误:

使用图数据时出错,必须是单个矩阵Y或X,Y对的列表

我还尝试使用addsample()函数将数据追加到时间序列,然后进行绘制。

K = addsample(TS, DATA(:,2));
plot(K);

但是这样做会产生以下错误:

必须将新样本指定为结构或“属性-值”对。

那么如何正确绘制该时间数据呢? 谢谢!

我经常与其他程序一起使用posix time(即unixtime ),但是在matlab中处理时间和日期最简单的格式是Matlab时间序列号格式。

为了从Unix转换为Matlab我广泛使用了一个小的转换函数:

function matlabtime = unix2matlabtime(unixtime)
%// function matlabtime = unix2matlabtime(unixtime)
%//
%// input : ** unixtime ** : time vector in the UNIX  time serial number
%//                          representation (seconds since 01-jan-1970)
%//
%// output : ** matlabtime **  : time vector in the Matlab time serial number
%//                          representation (days since 01-jan-0000)

pivot = datenum([1970 01 01 00 00 00]) ;
matlabtime = ( unixtime / 24 / 3600 ) + pivot ;

将此函数保存在路径上的某个位置,您可以像这样绘制数据:

%// Generate sample data
sampleunixtime = linspace( 1427205640 , 1427205900 ).' ;         %'// ignore this comment
DATA = [sampleunixtime , sin(sampleunixtime./10) ]  ;

%// get a time vector in Matlab time serial format, then plot
time = unix2matlabtime( DATA(:,1) ) ;
plot( time, DATA(:,2) ) 

%// Adjust X-Ticks in human readable format
set( gca , 'XTickLabel' , datestr( get(gca,'XTick'),'HH:MM:SS' ) )

获得:

imgexample

查看datenumdatestr文档,以了解如何处理这些内容。 日期/时间有许多预定义的输出格式,或者您甚至可以构建自己的格式以完善所需的精度(添加毫秒,删除秒数,添加日期等)。

请注意, XTickLabel现在已被覆盖,因此它们不会自动更新。 因此,如果zoompan图形,则必须重新运行最后一行代码以刷新XTicks值。

个人而言,我将最后一行代码放在Matlab工具栏快捷方式中,以便随时可以快速访问它 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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