MATLAB Answers

delete a subplot and renew plot

66 views (last 30 days)
karlo gonzales
karlo gonzales on 16 Jun 2014
Commented: dpb on 17 Jun 2014
Hi guys,
i am trying to update my subplot in a for loop, like;
fig1=figure;
for i=1:10
axes1 = axes('Parent',fig1, 'Position',[0.043 0.77 0.43 0.15]); box(axes1,'on'); hold(axes1,'all');
plot(rand(1,100),'Parent',axes1)
end
it works! and for each run i have a new graph. BUT, it has one problem; overlapping subplot box.
what should i do, to avoid this overlapping

  5 Comments

Show 2 older comments
dpb
dpb on 17 Jun 2014
for i=1:10
subplot1= subplot(4,2,1,'Parent',fig1,...
That doesn't solve any of your problems; you still have 10 subplot() axes and only one handle.
Again, what are you really trying to do???
karlo gonzales
karlo gonzales on 17 Jun 2014
Indeed, i don't have any more over-plotting box or axes with above-mentioned code
what i wanted to do was; open a figure+ several subplots at specific positions and update graphs in a for- loop.
dpb
dpb on 17 Jun 2014
Actually, the one problem of multiple handles does go away with subplot for overlapping calls--it has the smarts internally to make the existing the current--but so does just the syntax
subplot(N,M,i)
It would still be much simpler to retain the handle that corresponds to each when creating them (or not save any handles at all) rather than have the same variable refer to a bunch of different axes depending...
As for updating once you've created an axes object, the use of set for [x|y]data is far more efficient as Kevin noted.

Sign in to comment.

Answers (1)

Kevin Claytor
Kevin Claytor on 16 Jun 2014
Better yet, update using handles:
figure;
f = 2*pi;
x = linspace(1,100);
y = sin(x/f);
subplot(2,2,1)
plot(x,y);
title('Initial')
subplot(2,2,4);
title('Over Time')
h = plot(x,y);
for ii = 1:1000
newy = sin(1/f*(x - ii/pi));
% update using the handle to the graphics object
set(h,'ydata',newy);
pause(.1)
end

  1 Comment

karlo gonzales
karlo gonzales on 16 Jun 2014
thanks Kevin for your smart solution

Sign in to comment.

Sign in to answer this question.