How do I plot a figure and animate overlaying plots in a separate figure?

조회 수: 4 (최근 30일)
I am trying to understand how to plot a figure and animate on a separate one other stuff. The following piece of code
clear all;
close all;
clc;
% data
x = linspace(0,3,100);
f = sin(x);
% plot 1
figure;
plot(x,x);
% plot 2
figure;
plot(x,3*f);
% plot 3
figure;
for i=1:0.1:5
scatter(x,f);
hold on;
plot(x,i*f);
hold off;
drawnow;
end
creates two figures (plot 1 and 2) and then I wanted to animate something on the third figure, where each frame is to be drawn individually based on current plot commands or user-defined plot functions (i.e., I really want to plot first with scatter and on top of it plot the amplified sinus, I dont want to use plot(x,f,x,i*f)). My problem is that the animation sometimes is placed on figure 3 and sometimes on figures 1 or 2. I dont understand why and how I can solve this. Can you help me out? Thank you!

채택된 답변

Mauricio Fernández
Mauricio Fernández 2019년 4월 29일
One solution is just to explicitly define the function handle 'fh' and call it before plotting (no need for set(...) or stuff like that)
clear all;
close all;
clc;
% data
x = linspace(0,3,100);
f = sin(x);
% plot 1
figure;
plot(x,x);
% plot 2
figure;
plot(x,3*f);
% plot 3
fh = figure;
for i=1:0.1:5
figure(fh);
scatter(x,f);
hold on;
plot(x,i*f);
hold off;
axis([0,3,0,5]);
drawnow;
end
For a smoother animation, the axis has been set constant for all plots in the for loop.

추가 답변 (2개)

KSSV
KSSV 2019년 4월 29일
  댓글 수: 1
Mauricio Fernández
Mauricio Fernández 2019년 4월 29일
Thanks for the link, but there it is not clear what would solve the current problem. By that I mean if defining figure handles or using set() was the thing to do. I gave a separate answer explicitly defining a function handle and calling it, which seems to be easier.

댓글을 달려면 로그인하십시오.


Hussein
Hussein 2023년 7월 8일
clc clear all close all figure Z = peaks; surf(Z) axis tight set(gca,'nextplot','replacechildren','visible','off') f = getframe; [im,map] = rgb2ind(f.cdata,256,'nodither'); im(1,1,1,20) = 0; for k = 1:20 surf(cos(2*pi*k/20)*Z,Z) f = getframe; im(:,:,1,k) = rgb2ind(f.cdata,map,'nodither'); end imwrite(im,map,'DancingPeaks.gif','DelayTime',0.1,'LoopCount',inf) %g443800

카테고리

Help CenterFile Exchange에서 Animation에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by