2015-07-12 86 views
-2

我有一個包含2300個數據點的數據文件。數據在-0.1到0.1之間波動。我想繪製一部分繪圖,然後再次達到0.1的值。例如: 如果第一個點是0.1,那麼將其繪製直到再次點擊0.1,然後停止。 並再次執行相同操作。所以,我一直無法做到這一點。任何幫助,將不勝感激。關閉數據並在MATLAB中繪圖

下面是代碼:

G_Data = load('sample3.txt'); 
time = G_Data(:,1); 
Ax = G_Data(:,2); 
Ay = G_Data(:,3); 
Az = G_Data(:,4); 

%% Data parsing 
ind = find(Az< 0.1& Az>-0.1); 
nAz = Az(ind); 
ntime = time(ind); 
figure 
plot(ntime,nAz) 

%plot(ntime(1:197),nAz(1:197))' 

我想在這種情況下的數目(197),因爲這是第一次將數據集命中到由代碼中找到的約0.1的值。

這是當前的情節:

current

這是所希望的描繪:

desired

這裏是鏈接到數據文件 DataFileTest

+0

我把一個鏈接文件與圖像,第一個情節之間有那些奇怪的差距。第二個是所需的情節。我想在代碼看到頂部的扁平線條後立即切斷數據,對其中的數據進行繪圖並對其中的以下數據做同樣的事情 – DashD

+0

'奇怪的扁平線'是您沒有任何數據的區域。用''*''或其他格式命令繪圖來查看。 – nkjt

+0

感謝您指出,我能夠清理它,並有適當的拋物線或曲線顯示! – DashD

回答

0

我認爲,最簡單的方法(雖然可能不是最高效計算),將您的數據拆分到不同的數組如下:

%make a cell to hold your arrays 
outarrays = {}; 

%initialise a sub-array counter 
subarray = 1; 

%loop over all datapoints 
for datapoint = 1 : length (Az) 
    outarrays{datapoint} = []; 
    if Az(datapoint) < 0.1 
     outarrays{subarray}[end+1] = Az(datapoint); 
    else 
     %move on to next sub-array 
     subarray = subarray + 1; 
    end 
    datapoint = datapoint + 1; 
end 

則是簡單的繪製使用

第n子陣
cumulative_time = 0; 
for subarray = 1 : n - 1 
    cumulative_time = cumulative_time + length(outarray{subarray}); 
end 
plot(time(cumulative_time : cumulative_time + length(outarray{n})),outarray{n}); 

我知道它充滿了在matlab中效率不高的循環,但只有幾千個點,它應該在很短的時間內運行。請檢查代碼 - 我沒有適當的數據進行測試。

希望這有幫助!

+0

我打算試一試,我在哪裏加載我想在此代碼中測試的文件? – DashD

+0

我假設您使用您發佈的代碼段的前5行加載了您的數據... – srthompers

+0

我在哪裏可以獲得n的值?它在整個代碼中都沒有定義 – DashD