3

したがって、MATLAB には、次のことを行う単純なループがあります。

for p = 1:100

  x = 4.*randn(1,100);
  y = 7.*randn(1,100);

  figure(1) 
  plot(randn(1,100));

  figure(2);
  plot(randn(1,100));

end

x と y は構成されていますが、それが要点です。とにかく、このコードを実行すると、驚くことではありませんが、MATLAB は 2 つの Figure を作成し、それに応じてプロットします。問題は、これを行うと図の間で一種の「点滅」が発生し、時間の経過とともに x と y が進化するのを見る品質が低下することです。

次のように、プロットの 1 つをより滑らかにする方法を発見しました。

figure(1);
for p = 1:100

  x = 4.*randn(1,100);
  y = 7.*randn(1,100);

  plot(randn(1,100));
  drawnow

 end

これを行うと、もちろん図 (1) はプロット間で図 (1) が「点滅」することなく、x を非常にスムーズに表示してプロットしますが、今は図 (2) または y を表示できません!

「点滅」せずに、これらの量を異なる図 (サブプロットではない) にスムーズにプロットするにはどうすればよいですか?

編集:

Geodesic の回答に感謝します。解決策は機能しますが、問題になるとは思わなかった微妙な点がありますが、問題はあります。

1) このソリューションでは「imagesc」を使用できません。

例えば、

figure(1);
aone = axes;
figure(2);
atwo = axes;

for p = 1:100

  x = 4.*randn(1,100);
  y = 7.*rand(10,100);


  plot(aone,x);
  drawnow;
  imagesc(atwo,y);
  drawnow;
end

この場合、imagesc(atwo, y) の部分がクラッシュします。

4

2 に答える 2

9

ちらつきは、ループを介して各図ウィンドウを何度も生成しているためです。これにより、ウィンドウが毎回前面に表示されます。最初に Figure を生成し、いくつかの軸をそれらにアタッチし、次のように各軸にデータをプロットします。

figure(1);
aone = axes;
figure(2);
atwo = axes;
for p = 1:100

  x = 4.*randn(1,100);
  y = 7.*randn(1,100);


  plot(aone,randn(1,100));
  drawnow;
  imagesc(y,'Parent',atwo);
  drawnow;
end

編集: のような関数plotは軸引数を直接受け取りますが、そうでimagescはありません。この特定のケースでは、プロパティ名/値のペアを引数として送信する必要があります。生成された画像の「親」が軸になりますatwo(上記参照)。

于 2012-12-05T03:34:59.697 に答える
1

= 1 の場合、コマンドまたは コマンドpを使用して、必要なプロットを作成します。出力引数を取得して、結果のグラフィックス オブジェクトのハンドルを保持します。これは、作成する特定のプロット タイプに応じて、Handle Graphicsまたはオブジェクト、またはその他になります。plotimagesch = plot(....h = imagesc(....lineseriesimage

= 2:100 の場合p、プロット コマンドを直接使用しないでください。代わりDataに、元の Handle Graphics オブジェクトの関連するプロパティを更新しますh。たとえば、コマンドlineseriesの結果のオブジェクトの場合、そのオブジェクトとプロパティを新しいデータに設定します。コマンドの結果のオブジェクトの場合、そのプロパティを新しいイメージに設定します。plotXDataYDataimageimagescCData

必要に応じて、更新後に呼び出しdrawnowて、グラフィックス キューを強制的にフラッシュします。

于 2012-12-05T17:19:24.967 に答える