2

したがって、2D平面にN点のプロットがあります(Nは非常に大きくなる可能性があります)。アルゴリズムの仕組みを示すスクリプトを書いています。だから私はループを持っています。for ループの各ステップで、現在のポイントの色を変更したいと思います (実際には、おそらくこのポイントだけでステム プロットを作成します)。

ただし、ステップの最後に、次のポイントに色を付けることができるように、現在のポイントの色を削除したいと思います。現在、プロット全体 (2D ポイントを含む) を再描画する必要があります。Matlab がプロット コマンドでそのようなことを検出するかどうかはわかりませんが、プロット全体を再描画せずにこれを行う方法はありますか?

例えば:

plot(x,y, '*');


for j = 1:N-1
    for i = j:N
        hold on;
        %Do stuff

        plot(x,y, '*');
        hold on;
        stem(x(1), y(1), 'g*');
    end

end
4

2 に答える 2

7

簡単な例:

%# plot some data
x = 1:100;
y = cumsum(rand(size(x))-0.5);
plot(x,y,'*-')

%# animate by going through each point
hold on
h = stem(x(1),y(1),'g');
hold off
for i=1:numel(x)
    %# update the stem x/y data
    set(h, 'XData',x(i), 'YData',y(i));

    %# slow down a bit, drawnow was too fast!
    pause(.1)
end

スクリーンショット

于 2012-06-23T01:55:33.560 に答える
2

ハンドルグラフィックスオブジェクトのドキュメントをご覧ください。

ポイントのセット全体を1つのオブジェクトとしてプロットすることをお勧めします。次に、反復ごとに、関心のあるポイントをプロットします。ハンドルを保存します(、のようにh = plot(...);)。次の反復の準備ができたら、deleteそのハンドル(delete(h))を使用してオブジェクトを作成し、同じ方法で次の反復を作成します。

%# outside the for loop (do this once)
plot(x,y,'*');

for...
    h = stem(x(i),y(i),'g*');
    ...
    %# next iteration... i has been incremented
    delete(h);
    h = stem(x(i),y(i),'g*');
end
于 2012-06-23T00:44:45.557 に答える