Keep existing subplots while running code multiple times
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Subhasish Sutradhar
el 23 de En. de 2020
Comentada: Mohammad Sami
el 4 de Feb. de 2020
Hello,
I have written a code which calculates certain parameters and plots several subplots in a figure as follows:
figure('name','my_title');
h1=subplot(2,2,1);
plot (x1,y1);
h1=subplot(2,2,2);
plot(x2,y2);
h1=subplot(2,2,3);
plot(x3,y3);
h1=subplot(2,2,4);
plot(x4,y4);
Now I have to run the same code multile times for differnet data sets. I would like to keep the existing subplots (from lets say data set 1) and plot the new subplots (from lets say data set 2) on top of the existing subplots for comparison. But everytime I try to do it, its erasing the existing subplots and only plotting the current data set.
I tried to use findobj to check whether the figure exists and if so then use it as follows:
fOp.figName='my_title';
hf=findobj('Type','figure');
if ~isempty(hf)
figure(hf);hold all;
else
hf = figure('Name',fOp.figName);
hold all;
end
h1=subplot(2,2,1);
hold all;
plot (x1,y1);
h1=subplot(2,2,2);
hold all;
plot(x2,y2);
h1=subplot(2,2,3);
hold all;
plot(x3,y3);
h1=subplot(2,2,4);
hold all;
plot(x4,y4);
While it keeps the figure 1 open for the multiple runs, but it still erases the previous subplots inside the figure 1. I think I have to use 'Children' function in some way but not sure how. Any help would be much appreciated. Thank you.
3 comentarios
Rik
el 24 de En. de 2020
@Mohammad you should post your comment as an answer. When doing so you should probably elaborate on your suggestion of using an explicit axes handle in the plot call.
Respuesta aceptada
Mohammad Sami
el 25 de En. de 2020
Editada: Mohammad Sami
el 25 de En. de 2020
You can change your code as follows.
fOp.figName='my_title';
hf = findobj('Type','figure','Name',fOp.figName);
if ~isempty(hf)
% get the handles if the figure already exist
hf = figure(hf);
h1 = hf.Children(4); % subplot 221
h2 = hf.Children(3); % subplot 222
h3 = hf.Children(2); % subplot 223
h4 = hf.Children(1); % subplot 224
else
% create figure and subplots if the figure does not exist
hf = figure('Name',fOp.figName);
h1=subplot(2,2,1);
h2=subplot(2,2,2);
h3=subplot(2,2,3);
h4=subplot(2,2,4);
end
hold(h1,'on');
plot(h1,x1,y1);
hold(h2,'on');
plot(h2,x2,y2);
hold(h3,'on');
plot(h3,x3,y3);
hold(h4,'on');
plot(h4,x4,y4);
6 comentarios
Mohammad Sami
el 4 de Feb. de 2020
You can specify the legend in the plot command lgdtxt = 'data1'; plot(h1,x1,y1,'DisplayName',lgdtxt);
Then finally at the end just call the legend. It will use the display name property to create the legends
Más respuestas (0)
Ver también
Categorías
Más información sobre Creating, Deleting, and Querying Graphics Objects en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
