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