MATLAB generating a ghost figure

8 views (last 30 days)
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

Cris LaPierre
Cris LaPierre on 7 Jan 2022
You also need to specify the target axes/figure for your calls to hold and brush
You should probably be using a uifigure instead of figure. At least I get a warning that some of the functionality is not supported in figures.
Try this (untested)
hold(ax(i),'on') % and 'off'
brush(fig,'on')
  5 Comments
Eric Snyder
Eric Snyder on 10 Jan 2022
I replaced uiaxes with axesand it now works just fine. I'm not sure what the problem was prior. It's possible a setting I had somewhere else in my code didn't get along with uiaxes, but as of now I haven't figured out why it gave me trouble.

Sign in to comment.

More Answers (1)

Walter Roberson
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
Walter Roberson
Walter Roberson on 7 Jan 2022
Anyhow, hold on and brush on are your problems.

Sign in to comment.

Categories

Find more on Develop uifigure-Based Apps 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!