2009-10-30 1020 views
1

我遇到了麻煩試圖比較和繪製不同長度的兩個文件。在MATLAB中,我不知道如何在同一個x軸上繪製兩個不同長度的向量。由於一個文件缺少一些數據,因此我想創建一行併爲相應的時間戳留出空格。下面是數據文件的樣本:如何在MATLAB中在同一軸上繪製不同長度的向量?

文件1:

date time T01 T02 T03 T04 T05 
8/16/2009 0:00, 516.900024, 450.5,  465.200012, 546.799988, 539.700012 
8/16/2009 0:10, 351.200012, 398.899994, 418.100006, 510.299988, 518.5 
8/16/2009 0:30, 241.399994, 252.399994, 256,  360.600006, 386.5 
8/16/2009 1:00, 184.199997, 154.300003, 143.899994, 236.600006, 244.399994 

文件2:

date time T01 T02 T03 T04 T05 
8/16/2009 0:00, 656.799988, 611.200012, 860.599976, 604.700012, 288.5 
8/16/2009 0:10, 527.400024, 359.200012, 789.099976, 789.099976, 446.799988 
8/16/2009 0:20, 431.5,  327.100006, 763.599976, 895.099976, 689.099976 
8/16/2009 0:30, 328.399994, 301.700012, 824,  1037.099976, 955.299988 
8/16/2009 0:40, 261.5,  332.200012, 811.700012, 962.200012, 915.599976 
8/16/2009 0:50, 180.300003, 291.100006, 700.099976, 855.200012, 836.900024 
8/16/2009 1:00, 294.399994, 281.399994, 731.299988, 881.700012, 666.200012 
8/16/2009 1:10, 274.899994, 334.200012, 759.400024, 913.900024, 760.799988 

我想重拍文件1,如下所示:

8/16/2009 0:00, 516.900024, 450.5,  465.200012, 546.799988, 539.700012 
8/16/2009 0:10, 351.200012, 398.899994, 418.100006, 510.299988, 518.5 
8/16/2009 0:20, ,,,, 
8/16/2009 0:30, 241.399994, 252.399994, 256,  360.600006, 386.5 
8/16/2009 0:40, ,,,, 
8/16/2009 0:50, ,,,, 
8/16/2009 1:00, 184.199997, 154.300003, 143.899994, 236.600006, 244.399994 
8/16/2009 1:10, ,,,, 

有沒有辦法做到THI S'它會幫助我很多,因爲我試圖根據時間戳來鏈接2個文件。

P.S:我想使用MATLAB中的ismember功能時遇到的各種問題。

+0

沒有人的幫助? – 2009-10-31 02:56:48

回答

2

我假設你是從作爲answers to this question描述的文件第一次讀取數據。如果您有時間戳(使用DATENUM轉換)以及存儲在變量fileData1fileData2中的兩個文件中的數據,以下是繪製同一組軸上各個數據的簡單方法(使用功能PLOTHOLD命令):

t1 = fileData1(:,1); %# Time-stamps for file 1 
d1 = fileData1(:,2); %# First column of data for file 1 
plot(t1,d1,'ro-'); %# Plot data from file 1, using a red line with circles 
hold on; 
t2 = fileData2(:,1); %# Time-stamps for file 2 
d2 = fileData2(:,2); %# First column of data for file 2 
plot(t2,d2,'bo-'); %# Plot data from file 2, using a blue line with circles 

在上述圖將具有不同數量的時間點(即圓標記)的每一行,但每個將是一個連續的(即不中斷的)線。如果你想顯示在情節斷裂那裏缺少時間標記,你可以墊從文件1 NaN值的數據。如果您確定在更小的文件中沒有時間戳記不是(即較小的文件中的時間戳記是較大的時間戳記的子集),那麼你可以使用函數ISMEMBER如下:

newData = nan(size(fileData2));  %# New file 1 data, initialized to NaN 
t = fileData2(:,1);     %# Use the time-stamps from file 1 
index = ismember(t,fileData1(:,1)); %# Find row indices of common time-stamps 
newData(:,1) = t;     %# Copy time-stamps 
newData(index,:) = fileData1;  %# Copy data 

如果有不在時間戳在較小的文件較大,那麼你將不得不使用基於INTERSECT功能的解決方案(如my answer to your other related question所示)。

而現在,你可以通過繪製數據如下:

d1 = newData(:,2);   %# First column of padded data for file 1 
d2 = fileData2(:,2);   %# First column of data for file 2 
plot(t,d1,'ro-',t,d2,'bo-'); %# Plot both lines 

區別在這裏打印時(使用一些隨機生成的數據)南填充使樣品:

alt text

+0

非常感謝,當你已經從我的,你太評論其他問題見過,我花了大量的時間來弄清楚上述問題。 – 2009-11-18 04:27:04

+0

@gnoice:有沒有辦法繪製一個單元格格式的矩陣?通常我使用> plot(x,y)x = data(:,1); Y =數據(:,2);當數據在單元格中時,我該怎麼做?我試過cellplot,沒有工作。還試過x = cell2mat(data(:,1));也沒有工作。 – 2010-03-19 18:53:13

+0

@AP:這取決於你的變量'data'的外觀。它是一個N×2單元陣列,每個單元有一個數字?或者它是一個1×2的單元陣列,每個單元包含一個N乘1的矢量?第一種情況可以這樣處理:'plot([data {:,1}],[data {:,2}]);'第二種情況可以像這樣處理:'plot(data {1}, data {2});'如果沒有更多關於'data'的詳細信息,這是我可以回答的最好的。 – gnovice 2010-03-19 19:32:10

相關問題