Easy Question, update scatter point in loop

10 次查看(过去 30 天)
Hi:
I just want to get the 4 vectors scatter update every time in my loop. Delete the last time points then plot then hold on to new loop.
How to do that??
Thank you.
x1{1} = [.2; .3]; x2{1} = [.3; .4]; x3{1} = [.5; .6]; x4{1} = [.6; .7]; k = 1;
for k = 1:1:50
scatter(x1{k}(1,1), x1{k}(2,1));
hold on
scatter(x2{k}(1,1), x2{k}(2,1));
hold on
scatter(x3{k}(1,1), x3{k}(2,1));
hold on
scatter(x4{k}(1,1), x4{k}(2,1));
x1{k+1} = (x1{k} + x2{k} + x4{k})/3;
x2{k+1} = (x1{k} + x2{k} + x3{k})/3;
x3{k+1} = (x2{k} + x3{k} + x4{k})/3;
x4{k+1} = (x1{k} + x3{k} + x4{k})/3;
end

采纳的回答

Ben11
Ben11 2014-6-24
What if you try this:
x1{1} = [.2; .3]; x2{1} = [.3; .4]; x3{1} = [.5; .6]; x4{1} = [.6; .7]; k = 1;
figure
for k = 1:1:50
hold all
scatter(x1{k}(1,1), x1{k}(2,1))
scatter(x2{k}(1,1), x2{k}(2,1));
scatter(x3{k}(1,1), x3{k}(2,1));
scatter(x4{k}(1,1), x4{k}(2,1));
x1{k+1} = (x1{k} + x2{k} + x4{k})/3;
x2{k+1} = (x1{k} + x2{k} + x3{k})/3;
x3{k+1} = (x2{k} + x3{k} + x4{k})/3;
x4{k+1} = (x1{k} + x3{k} + x4{k})/3;
hold off
drawnow
end
First you create a figure, then you force the plot to update with drawnow. You can keep the original "hold on" calls and see what it does as well.
  12 个评论
Yuang
Yuang 2014-6-24
Sorry. I mean I want the figure shows the path x1,x2,x3 and x4 go.
Ben11
Ben11 2014-6-24
ok. Do you mean something like this:
for k = 1:50
scatter(x1{k}(1,1), x1{k}(2,1))
if k > 1
line([x1{k-1}(1,1) x1{k}(1,1)],[x1{k-1}(2,1) x1{k}(2,1)],'Color','r');
end
drawnow
hold on
scatter(x2{k}(1,1), x2{k}(2,1));
if k > 1
line([x2{k-1}(1,1) x2{k}(1,1)],[x2{k-1}(2,1) x2{k}(2,1)],'Color','g');
end
drawnow
hold on
scatter(x3{k}(1,1), x3{k}(2,1));
if k > 1
line([x3{k-1}(1,1) x3{k}(1,1)],[x3{k-1}(2,1) x3{k}(2,1)],'Color','b');
end
drawnow
hold on
scatter(x4{k}(1,1), x4{k}(2,1));
if k > 1
line([x4{k-1}(1,1) x4{k}(1,1)],[x4{k-1}(2,1) x4{k}(2,1)],'Color','k');
end
drawnow
hold on
x1{k+1} = (x1{k} + x2{k} + x4{k})/3;
x2{k+1} = (x1{k} + x2{k} + x3{k})/3;
x3{k+1} = (x2{k} + x3{k} + x4{k})/3;
x4{k+1} = (x1{k} + x3{k} + x4{k})/3;
hold off
pause(.1)
end
I seems odd is it what you would expect?

请先登录,再进行评论。

更多回答(1 个)

Geoff Hayes
Geoff Hayes 2014-6-24
Try grabbing the handle returned from each scatter call and then deleting that on subsequent iterations. Outside the for loop declare an array to manage the scatter plot handles
% declare an array for the handles to the scatter plots
scatterHandles = [];
Now within the for loop, delete the handles if any exist
for k = 1:1:50
% delete scatter plot data from previous iteration if it exists
if ~isempty(scatterHandles)
for m=1:length(scatterHandles)
delete(scatterHandles(m));
end
end
% get the scatter plot handles for each call to scatter
hold on
scatterHandles (1) = scatter(x1{k}(1,1), x1{k}(2,1));
scatterHandles (2) = scatter(x2{k}(1,1), x2{k}(2,1));
scatterHandles (3) = scatter(x3{k}(1,1), x3{k}(2,1));
scatterHandles (4) = scatter(x4{k}(1,1), x4{k}(2,1));
% etc.
end
Try the above and see what happens!

类别

Help CenterFile Exchange 中查找有关 Graphics Performance 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by