2013-04-06 36 views
0

如果我有以下代碼:重畫相同的數據點多次

for t=1:length(s) % s is a struct with over 1000 entries 
    if s(t).BOX==0 
    a(t,:)=0; 
    elseif s(t).BOX==1 
    a(t,:)=100; 
    end 
    if s(t).BOX==2 
    b(t,:)=150; 
    elseif s(t).BOX==3 
    b(t,:)=170; 
    end 
    . 
    . 
    . 

end 
plot(a) 
plot(b) 
plot(c) 

我想要完成的任務:

for n=1:length(s) 

Plot the data point of a(n) at t=0, t=1, t=2 
then 
Plot the data point of b(n) at t=3, t=4, t=5 
. 
. 
. 
etc 

因此,基本上,每個數據點都會被繪製在移動到下一個點之前的3個值爲t

我該如何做到這一點?

編輯

事情是這樣的:

enter image description here

+0

不確定這是否是你想要做的,但是根據需要嘗試用'NaN'值預先給出數組。這將使情節看起來像時間轉移。如果你想重複一些值,複製它們,以便:'[1 2 3]'變成'[1 1 1 2 2 3 3 3]'' – Amro 2013-04-06 13:57:21

+0

'a(t,:)'依賴於't',所以在同一時間使't'等於多於一個值將提供不想要的輸出。我想我誤解了你的意思。也許在下面添加它作爲潛在的答案? – NLed 2013-04-06 14:08:08

+0

事實是,我仍然沒有完全獲得您發佈的代碼,因此我只寫了一條評論。你能再詳細一點嗎? – Amro 2013-04-06 14:15:28

回答

1

如果我正確理解你,並假設a是一個向量,你可以不喜歡

% Your for loop comes before this 

nVarsToPlot = 4; 
nRepeatsPerPoint = 3; 
t = repmat(linspace(1, nRepeatsPerPoint * length(s), nRepeatsPerPoint * length(s))', 1, nVarsToPlot); 
genMat = @(x)repmat(x(:)', nRepeatsPerPoint, 1); 
aMat = genMat(a); bMat = genMat(b); cMat = genMat(c); dMat = genMat(d); 
abcPlot = [aMat(:) bMat(:) cMat(:) dMat(:)]; 
plot(t, abcPlot); 

我有點不清楚你想要什麼樣的價值t來包含,但你基本上需要一個載體長度爲s的3倍。然後你可以生成正確的數據矩陣,方法是將每個向量(a, b, c, etc.)複製三次(將它們轉換爲行向量之後),然後將整個矩陣堆棧成矩陣,然後將其轉換爲向量,其中(:)應該出現在右側只要矩陣構造正確即可。

+0

謝謝你的回答。我想在選擇正確的'r'值之前保留'a b c',因爲每個數據點都有各種IF語句。有沒有一種方法可以實現我想要的而不會使代碼太複雜? – NLed 2013-04-06 16:38:02

+0

每次迭代中「a,b,c」的大小是多少?以上將只適用於如果他們是標量... – wakjah 2013-04-06 16:39:38

+0

問題更新 – NLed 2013-04-06 16:43:24

相關問題