3

私はMATLABでリアルタイムにデータをプロットしています。ハンドルを使いたいです。私の問題は、複数のYデータ曲線をプロットする方法がわからないことです。

次のコードを見つけました。これは、YDataの1つのセットをプロットする方法を示しています。コードを2つ以上のYデータセットに変換するアイデアを持っている人はいますか?たとえば、プロットの追加の曲線としてsind(x)を使用しますか?

x = 1:1000;
y = cosd(x);

xi = x(1);
yi = y(1);
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi');

for k = 2:1000...
xi = x(1:k);
yi = y(1:k);
refreshdata(h, 'caller');
drawnow;
end;
4

4 に答える 4

3

まず第一に、決して使用しないでrefreshdataください。set代わりに直接法を使用してください。

        set(h,'Xdata',xi,'YData',yi);

次に、2つのプロットを実行する必要があります

      h1 = plot(xi, yi);
      h2 = plot(xi, yi);

そしてそれに応じてそれぞれを更新します。

于 2012-10-25T13:20:06.987 に答える
3

あなたが本当にハンドルを使いたいのなら、以下のコードは私のために働きます

x = 1:1000;
y = cosd(x);
y2 = sind(x);

xi = x(1);
yi = y(1);
yi2 = y2(1);
figure(1); clf;
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi');
hold on;
h2 = plot(xi, yi2, 'YDataSource', 'yi2', 'XDataSource', 'xi');

for k = 200:1000
    xi = x(1:k);
    yi = y(1:k);
    yi2 = y2(1:k);
    refreshdata(h);
    refreshdata(h2);
    drawnow;
end;

が必要ですhold on

また、 Andreyが提案したように、代わりにrefreshdata使用できます。set

set(h,'Xdata',xi,'YData',yi);
set(h2,'Xdata',xi,'YData',yi2);
于 2012-10-25T13:52:43.777 に答える
1

あなたは多分holdコマンドを探していますか?

plot(1 : 10, (1 : 10).^2, 'r')
hold on
plot(1 : 10, (1 : 10).^3)

編集:

holdと組み合わせて使用​​しsetて、プロットを更新できます(Andreyの回答も参照)。

h1 = plot(1 : 10, (1 : 10).^2, 'r');
hold on;
h2 = plot(1 : 10, (1 : 10).^3);
set(h1, 'XData', 1 : 2 : 20);
set(h2, 'YData', 0.1 * (1 : 20).^3);

軸は自動的に更新されます。

于 2012-10-25T13:25:18.543 に答える
0

すべての曲線に同じ色を表示することにあまり関心がない場合は、xデータを曲線コンポーネント間でNaNで区切られた単一のベクトルに連結するだけです(yデータに対しても同様のことを行います)。次に、「プロット」コマンドはこれらのより大きなxおよびyベクトルを取り込んで、すべてを一度に表示します。colordata配列で同様のことを行うことで、色の問題を回避できる場合があります。

于 2014-05-20T16:44:03.887 に答える