2017-12-30 39 views
3
figure; 
ax1 = axes; 
figure; 
ax2 = axes; 
x = 0; y = 0; 
while ishandle(ax1) && ishandle(ax2) 
    x = x + 1; 
    y = y + 1; 
     figure(1) 
     scatter(x,y, 'MarkerEdgeColor', 'red') 
     hold on 
     figure(2) 
     scatter(x,y, 'MarkerEdgeColor', 'blue') 
     hold on 
    end 

私のスクリプトには、複数の数字があり、ループで更新されます。スクリプトが実行されている間、数字を表示する必要があります。残念ながら、現在更新されているFigureは常にフォアグラウンドでポップしているため、特定のFigureを監視することは不可能です。 figure(1)figure(2)という呼び出しがこの動作を引き起こすことを理解していますが、どのようにしてこれらの図にプロットすることができますか?数字をフォアグラウンドに入れないで図にプロットする

+4

は、あなたが呼び出す 'てみ散布(AX1、X、Y、「MarkerEdgeColor」、「赤」)'を使用しなければならない軸を指定するとことができませんでしたまったく "figure"。 – mikkola

+0

ああ、私はそれについて考えなかった。完璧に動作します、ありがとう!私は 'set(0、 'CurrentFigure'、

) 'を見つけただけですが、あなたのアイデアはもっと良いかもしれません。 – wheeler

+0

@mikkolaあなたはそれを答えにする必要があります、それは行く方法です。 – thewaywewalk

答えて

5

コメントでmikkolaが提案したように、scatterまたはplotのデータポイントを追加する軸を指定できます。しかし、より良い方法があります:1行のオブジェクトを作成し、xdataydataのプロパティを更新します。これは、より速く、より効率的なメモリです。あなたのコードはなる:

x = 0; y = 0; 
figure; 
h1 = plot(x,y,'ro'); 
figure; 
h2 = plot(x,y,'bo'); 
while ishandle(h1) && ishandle(h2) 
    x = x + 1; 
    y = y + 1; 
    h1.XData(end+1) = x; 
    h1.YData(end+1) = y; 
    h2.XData(end+1) = x; 
    h2.YData(end+1) = y; 
    drawnow 
    pause(0.1) 
end 

私はMATLABのハンドルグラフィックスを扱うときのための親指のルールのセットを保持します。

  • 使用figureが唯一の新しいフィギュアを作成するために、または前に、既存のフィギュア持って(あなたは、一般的には避けたいが、時には必要です):これらは、この質問に関連しています。

  • ハンドルを保持して使用することで、作業する図や軸を常に指定します。 gcfまたはgca(明示的でも暗黙的でもない)に依存することは決してありません。現在のFigureを使用するのはコマンドラインで入力するときに便利ですが、スクリプトや関数では、関数が実行されている間に誰かがウィンドウ上をランダムにクリックするよりも危険です。ウィンドウを作成した後にgcfに書き込むと、別の図に書き込まれることになります(本当に、ランダムなものを常にクリックします)。

  • 必要以上にオブジェクトを作成しないでください。プロットするすべての点に対して新しいlineオブジェクトを作成するのは無駄です。

も注意してくださいあなたは各ポイントごとに異なる色やサイズを指定しない限りplot(...'o')scatter(...)と同等であること。しかし、ドットサイズや色を使って追加情報を指定することは、その情報を伝える良い方法ではありません。グラフを通じて効果的なコミュニケーションを学ぶことに興味があるなら、Tufte's "The visual display of quantitative information"を読んでください。

+2

ニースの答え! 'plot(... 'o')は' scatter'と全く同じではなく、異なる入力を仮定しています。 'plot'は、1回の呼び出しで複数の一連のデータを(行列の列として)入力することを可能にしますが、' scatter'は一度に1つの系列しか受け取りません。 – EBH

+0

@EBH良い点。 –

2

関連する部分は、入力ax含むdocumentation of scatterの一部に見出すことができる:ax代わりに に電流軸で指定された軸に

scatter(ax,___)プロット。

これにより、散布図の描画に使用する軸を示す軸ハンドルを指定することができます。したがって、あなたのコードでfigureを使用してスキップし、代わりに入力を使用すると、figureに関連付けられた「前面に持ってくる」動作を回避できます。次のように

あなたはあなたのコードを変更することができます。

figure; 
ax1 = axes; 
figure; 
ax2 = axes; 
x = 0; y = 0; 
while ishandle(ax1) && ishandle(ax2) 
    x = x + 1; 
    y = y + 1; 
    scatter(ax1, x,y, 'MarkerEdgeColor', 'red') 
    hold on 
    scatter(ax2, x,y, 'MarkerEdgeColor', 'blue') 
    hold on 
end 
関連する問題