首页 文章

在MATLAB中绘制时间序列数据

提问于
浏览
0

我有一个包含两列数据的矩阵 . 第一列具有在UNIX时间内给出的时间戳,第二列具有相应的数据集 .

我试图在底部轴上以人类可读的时间绘制这个 DATA .

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

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

我知道MATLAB中有一个timeseries()函数,但我似乎无法正常工作 . 我应该能够绘制数据,following the MATLAB documentation .

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

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

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

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

虽然这种方法似乎有理性,但我得到以下错误:

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

我还尝试使用addsample()函数将数据附加到时间序列,然后绘制它 .

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

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

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

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

1 回答

  • 2

    我经常与 posix 时间(即 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工具栏快捷方式中,以便随时快速访问它) .

相关问题