MATLAB generating a ghost figure
16 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
0 Kommentare
Akzeptierte Antwort
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
am 10 Jan. 2022
I had no problem activing brush on a uiaxes
brush(ax(i), 'on')
Weitere Antworten (1)
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
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!