2014-12-05 66 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