MATLAB generating a ghost figure
Show older comments
I have a UI for brushing and labeling data. I've included a simplified version of the script below. The problem is that MATLAB is randomly generating a blank figure in addition to the GUI every time I run it. If I remove the "hold on; plot(DETECTIONS{i}, 'rx'); hold off" line and the "brush on" line, this extra figure is not generated. However, including either the hold on or the brush on portions causes MATLAB to generate a blank figure despite it never being explicitly asked to in the code. Any thoughts about why this could be happening and how to avoid it?
% initialize GUI
nplot = 4; % number of subplots
fig = uifigure('name', 'Label Detections');
grd = uigridlayout(fig, [nplot, 1]);
for i = 1:nplot
uipan(i) = uipanel(grd);
ax(i) = uiaxes(uipan(i));
end
% Find GUI figure, plot data on it
fig = findall(0, 'Type', 'figure', 'name', 'Label Detections')
for i = 1:nplot
plot(ax(i), DATA{i})
hold on
plot(ax(i), DETECTIONS{i}, 'rx')
hold off
end
brush on
Accepted Answer
More Answers (1)
Walter Roberson
on 7 Jan 2022
fig = figure('name', 'Label Detections');
That creates a "traditional figure"
grd = uigridlayout(fig, [nplot, 1]);
uigridlayout() cannot be children of traditional figures.
ax(i) = uiaxes(uipan(i));
uiaxes() cannot be children of traditional figures.
hold on
When you do not pass a parent to hold then it looks for the current axes, and creates a current axes if need be, which might involve creating a current figure. Only traditional axes (and traditional figures) are examined: the default never looks for uiaxes or uifigure.
You would need
hold(ax(i), 'on')
2 Comments
Eric Snyder
on 7 Jan 2022
Walter Roberson
on 7 Jan 2022
Anyhow, hold on and brush on are your problems.
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!