2017-07-07 8 views
-1

複数のMatlabプロットコール中に2つまたは複数のデータポイントを接続したいとします。以下は、私が達成しようとしているかを示し、いくつかのダミーコード、複数のMatlabプロットコール時に接続ポイントを

function main() 
close all 

t = 0; 

while t<10 
    x = rand(1,1); 
    y = rand(1,1); 
    t = t+1; 
    calculateErrorAndPlot(1,x,y,t) 
end 
return 


function calculateErrorAndPlot(figureNumber,x,y,time) 

    figure(figureNumber); 
    if ~ishold 
     hold on 
    end 

    error = x-y; 
    plot(time,error,'.b'); 
return 

は今ですが、私は少なくともプロットされているデータポイントを表示するには、「.B」を使用する必要があります。プロットはスカラーで呼び出されていることに注意してください。

+0

ただ2つのポイントを回線で接続しようとしていますか?それはあなたの質問ですか? – Flynn

+0

はい、質問の文脈では、単に2点を線で結ぶのではありません。 – anr

答えて

-1

ここにいくつかのコードがあります。しかし、私は提案や他のコードが簡単で速いかもしれません。

function calculateErrorAndPlot(figureNumber,x,y,time) 

figure(figureNumber); 
if ~ishold 
    hold on 
end 

error = x-y; 

h = findobj(figure(figureNumber),'Type','line'); 
if isempty(h) 
    xx = time; 
    yy = error; 
else 
    xx = [h(1).XData(end) time]; 
    yy = [h(1).YData(end) error]; 
end 
plot(xx,yy,'.-black'); 
return 
0

私はこれを書き換え、および機能を削除します:

time = [1:10]; 

for ii = 1:length(time) 
    x = rand(1,1); 
    y = rand(1,1); 
    error(ii) = x-y; 
end 
plot(time,error,'.-b') 
+0

スカラーをプロットするのではなく、配列を作成したばかりの方がうまくいくようです。明らかに、あなたの実際のコードがどのように見えるのかわかりませんが、これが役に立つのかどうか教えてください。 – Flynn

+0

はい。ありがとうございます。上のコードは私のコードの代表例です。私は今やxとyの前にできる方法はないので、スカラーになるでしょう。そのため私は乱数ジェネレータを使用しています。 1つの選択肢は、プロット上のすべてのxとy点を取得して線としてそれらを再現することです。 – anr

+0

私はあなたがx値とy値を増やしているかどうか分かりません。しかし、もし1日1セットが得られたら、上記の変数をマットファイルに保存し、次のセットを既存の変数に追加/連結することができます。 エラーが= [1 2 5 6]で、x、yの別のセットがある場合。あなたは単にエラーを読み込んでそれを連結することができるので、error = [error、newerror]です。それに応じて時間を調整してください。 – Flynn

1

あなたはすでに新しいポイントを追加するためにプロットされたラインのXDataYDataプロパティを更新することができます。例:

function main 
    fig = figure; 
    ax = axes('Parent', fig); 
    line = plot(NaN, NaN, 'Parent', ax); 
    for t = 0:9 
     x = rand(1, 1); 
     y = rand(1, 1); 
     calculateErrorAndPlot(line, x, y, t) 
    end 
end 

function calculateErrorAndPlot(line, x, y, t) 
    xData = get(line, 'XData'); 
    yData = get(line, 'YData'); 
    xData(end+1) = t; 
    yData(end+1) = x - y; 
    set(line, 'XData', xData, 'YData', yData); 
end 
+0

@anr。私はさらに喜んでお手伝いしますが、あなたが試したこととうまくいかなかったことを説明する必要があります。 –

+0

@anr。私の元の答えは、XDataとYDataを使用する正しい方向であなたを指すことになっていました。コピーアンドペーストのソリューションではありません。私は今あなたの主な機能の文脈の中でより完全になるように編集しました。私は、このソリューションを使用する前に、これらのラインプロパティを習得して実験することをお勧めします。 –