Matlab在没有重新绘制的情况下更改绘图中的单个点

时间:2012-06-23 00:37:58

标签: matlab plot octave

所以我在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

2 个答案:

答案 0 :(得分: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

screenshot

答案 1 :(得分:2)

查看handle graphics objects的文档。

我建议将整个点集绘制为一个对象。然后,对于每次迭代,绘制兴趣点。保存句柄(如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