How to create a single gobjects for different plots to avoid using clf

1 vue (au cours des 30 derniers jours)
Bandar
Bandar le 7 Août 2021
Réponse apportée : darova le 9 Août 2021
I'm trying to use plot() several times without using clf because this causing my animation to blink. In the discussion in here [plot is blinking when clearing figure], a clever solution suggested by @Walter Roberson is to update data rather than creating a new object for plot every iteration. I've managed to create the following minimal working example as a start point for my problem. For each function (i.e. y1,y2), I need to create a new gobjects so that I can update their data rather than calling clf which causes terrible. The problem with the aforementioned approach is the fact that I need to create gobjects for each drawable thing. In my actual application, drawable things are unknown a priori. In the simuation, I have to add them depending on specific conditions. My question is how can I modify the below code in a clever way to use a shared gobjects and at the same time avoid using clf.
objarray = gobjects(1,2);
x=0:0.1:1;
y1=sin(x);
y2=cos(x);
for i=1:20
if ~ishghandle(objarray(1))
objarray(1) = plot(x,y1,'LineWidth',2);
else
x=0:.1:i;
y1=sin(x);
objarray(1).XData = x;
objarray(1).YData = y1;
end
if ~ishghandle(objarray(2))
if ~ishold
hold on
end
objarray(2) = plot(x,y2,'r','LineWidth',2);
else
x=0:.1:i;
y2=cos(x);
objarray(2).XData = x;
objarray(2).YData = y2;
end
axis([0 22 -2 2])
pause(.2)
end
The above code can be done with clf as follows which is not working for my case.
for i=1:20
clf
x=0:0.1:i;
y1=sin(x);
y2=cos(x);
plot(x,y1,'LineWidth',2);
hold on
plot(x,y2,'r','LineWidth',2);
hold off
axis([0 22 -2 2])
pause(.2)
end

Réponses (1)

darova
darova le 9 Août 2021
Try this way
x = 0:.2:10;
y1 = x + nan;
y2 = x + nan;
h1 = plot(x,y1,'r');
h2 = line(x,y2);
for i = 1:length(x)
y1(i) = sin(x(i));
y2(i) = cos(x(i));
set(h1,'ydata',y1);
set(h2,'ydata',y2);
pause(0.1)
end

Catégories

En savoir plus sur Graphics Object Programming dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by