2014-12-05 51 views
3

在下面的代码中,我创建了一个简单的数据序列,时间向量,然后是时间序列。我没有问题密谋他们两个。 (这并不重要,他们是在同一个情节。)我一直无法弄清楚是如何子集一个时间序列的一部分如图失败,出现错误的最后一个命令:选择部分时间序列

>> timeseriesTest 
Error using timeseries/plot (line 27) 
The plot method can only be used for a single timeseries object 

Error in timeseriesTest (line 14) 
plot(ts(25:end)); 

>> 

如何提取时间序列中最后25个(本例中)的值?重要提示:虽然在下面的代码中不是这样,但我的时间序列有每日或每周的时间戳,我确实需要保留它。 I.e .:

NewData = ts.data 

...不是一个好的答案,除非它是获得新提取时间序列的唯一方法。

t=[1:50]; 
d=sin(2*pi*t/20); 

ts = timeseries(2*d, t); 

%plot data and timeseries 
plot(d); 
hold on; 
plot(ts); 

figure(); 
plot(d(25:end)); 
hold on; 
plot(ts(25:end)); 

回答

7

如果你看一个TimeSeries对象的属性,当你运行你的代码,然后再尝试和情节,这就是我们看到:

>> ts 

    timeseries 

    Common Properties: 
      Name: 'unnamed' 
      Time: [50x1 double] 
     TimeInfo: [1x1 tsdata.timemetadata] 
      Data: [1x1x50 double] 
     DataInfo: [1x1 tsdata.datametadata] 

你看,有一个Data场在您的时间序列对象中,以及代表每个点实例的时间值的Time字段。如果你想单独访问等领域,并绘制了最后的25个元素,做这样的事情:

plot(ts.Time(end-24:end), squeeze(ts.Data(end-24:end))); 

ts是你TimeSeries对象,如果你想这样说对象中访问字段,使用点运算符(. ......你已经知道了)。一旦使用点运算符,只需使用其适当的名称访问所需的字段。因此,如果您需要时间值,请使用Time,如果您需要数据,请使用Data。现在,看起来奇怪的是我使用了squeezesqueeze删除单身尺寸。如果你可以看到,Data是一个1 x 1 x 50阵列,当它应该只是一个50 x 1阵列。 squeeze的目的是删除冗余维度以获取我们的实际数据。

请注意,这只有在您的时间序列中只有一个信号时才会发生。我们是否应该有多个信号......如果我们想要三个长度为50的信号,我们将创建一个50 x 3矩阵,其中每个列表示一个单一信号。这将是这个样子:

>> t = 1:50; 
>> A = rand(50,3); 
>> ts = timeseries(A,t) 

    timeseries 

    Common Properties: 
      Name: 'unnamed' 
      Time: [50x1 double] 
     TimeInfo: [1x1 tsdata.timemetadata] 
      Data: [50x3 double] 
     DataInfo: [1x1 tsdata.datametadata] 

rand产生你的[0-1]的范围内想要的任何大小的值的随机矩阵或向量。你会看到我们的信号现在是50 x 3。如果你想绘制这个,plot识别每帧的时间多路信号....所以你可以这样做:

plot(ts.Time, ts.Data); 

这应该产生三个痕迹情节,分别由不同的颜色和内划定同一时间框架由ts.Time指定。

同样,如果您要绘制的最后25分,每信号,简单地做:

plot(ts.Time(end-24:end), ts.Data(end-24:end,:)); 

此代码将进入最后25行每列(即每个信号)的Data并绘制它们全部。

+1

谢谢雷林。如果我能给你100分,我会。很好的回答和坦率地说,我很惊讶没有找到StackOverflow的某处,所以我希望它能在未来获得很多积分。 – LGTrader 2014-12-05 18:04:10

+0

@LGTrader - 感谢您的意见!我坦率地感到惊讶,这个问题还没有得到解决,我必须为它写一个答案......很奇怪!但是,谢谢你:) – rayryeng 2014-12-05 19:08:08