Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中绘制时序数据_Matlab - Fatal编程技术网

在MATLAB中绘制时序数据

在MATLAB中绘制时序数据,matlab,Matlab,我有一个包含两列数据的矩阵。第一列具有UNIX时间中给定的时间戳,第二列具有相应的数据集 我试图用底部轴上的人类可读时间来绘制这个数据 我绘制了原始数据,如下所示: plot(DATA(:,1), DATA(:,2)); plot(TS, DATA(:,1)); 我知道MATLAB中有一个函数,但我似乎无法使它正常工作。我应该能够绘制数据 我已尝试将第一列声明为时间序列: TS = timeseries(DATA(:,1)); 然后我试着绘制数据,如下所示: plot(DATA(:,1),

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

我试图用底部轴上的人类可读时间来绘制这个
数据

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

plot(DATA(:,1), DATA(:,2));
plot(TS, DATA(:,1));
我知道MATLAB中有一个函数,但我似乎无法使它正常工作。我应该能够绘制数据

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

TS = timeseries(DATA(:,1));
然后我试着绘制数据,如下所示:

plot(DATA(:,1), DATA(:,2));
plot(TS, DATA(:,1));
虽然这种方法似乎是合理的,但我得到以下错误:

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

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

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' ) )
获得:

查看和文档以了解如何处理这些问题。有许多预定义的日期/时间输出格式,您甚至可以构建自己的格式,以精确到所需的精度(添加毫秒、删除秒、添加日期等)

请注意,
XTickLabel
现在被覆盖,因此它们不会自动更新。因此,如果您对您的体形进行
缩放
平移
,则必须重新运行最后一行代码以刷新
XTicks


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

我不认为
timeseries
是正确的函数,因为它只使用数据作为输入和等距时间步进(尽管有些可能会丢失)。但是,如果您有任意的时间点,它将无法按预期工作。能否添加示例数据,即
数据的前四行