Easy Question, update scatter point in loop
9 views (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
Ben11
on 24 Jun 2014
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 Comments
Ben11
on 24 Jun 2014
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?
More Answers (1)
Geoff Hayes
on 24 Jun 2014
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!
0 Comments
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!