MATLAB generating a ghost figure

16 Ansichten (letzte 30 Tage)
Eric Snyder
Eric Snyder am 7 Jan. 2022
Kommentiert: Eric Snyder am 10 Jan. 2022
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

Akzeptierte Antwort

Cris LaPierre
Cris LaPierre am 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 Kommentare
Walter Roberson
Walter Roberson am 10 Jan. 2022
I had no problem activing brush on a uiaxes
brush(ax(i), 'on')
Eric Snyder
Eric Snyder am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 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 Kommentare
Eric Snyder
Eric Snyder am 7 Jan. 2022
Oops, that's a typo. It should be uifigure, not figure. I edited the question. Thanks
Walter Roberson
Walter Roberson am 7 Jan. 2022
Anyhow, hold on and brush on are your problems.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by