Refresh overlaid plots without "hold on/hold off" in each loop iteration
Afficher commentaires plus anciens
I have a script with multiple figures that are updated in a for loop using their figure and axes handles. One of the figures is a pair of scatterplots overlaid on each other. I need both these concurrent scatterplots cleared at the beginning of each iteration, before updating with the new data for both of them. When using the "hold on" command to overlay the scatterplots on a single figure, I am unable to clear the second one for the next loop iteration using the "set" command. Here's a snippet of my code:
for i = 1 to N
% Figure 1 (with overlaid scatterplots)
if ~(exist(fig1))
fig1 = figure;
f1 = subplot(2,1,1,'Parent',fig1);
%% Overlay 2 scatterplots in this subplot %%
sc1 = scatter(x1,y1,'b','Parent',f1);
hold on;
scatter(x2,y2,'r','Parent',f1);
% Other subplots %
else
figure(fig1)
% Update new info for both scatterplots and overlay them in the first subplot
set(sc1,'XData',x1,'YData',y1,'CData',repmat(sc1.CData(1,:)),'Parent',f1);
hold on;
scatter(x2,y2,'r','Parent',f1);
% Other subplots %
end
% Plot some other figure
if ~(exist(fig2))
fig2 = figure;
ax = axes('Parent',fig1);
% Plot Figure 2
else
figure(fig2)
% Figure 2 plots and legends using ax
end
end
The problem is, the second scatterplot does not get cleared in the next loop iteration when set(sc1,...) is called. I tried the cla(f1,'reset') command, but that deletes all the XData, YData variables, which I need to exist in order to update.
I think the "hold on" is creating the persistence issue, but adding "hold off" after the second scatter just clears the entire subfigure including axes.
Is there some other way to accomplish the goal of overlaid scatterplots refreshed in each loop?
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Discrete Data Plots dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!