check if figure exists whithout making it appear and using its figure number in findobj()

384 views (last 30 days)
Hi,
I want to know if a figure exists, however without it ever appearing at the forefront (I thus cannot use simply the figure() function). The function findobj() is a good candidate to solve this problem, however I do not want to use the 'name' as the argument for the search, i.e. I do not want to do:
findobj('type','figure','name','mytitle')
but rather use the number of the figure used when the figure is created, using
figure(nbrfig)
Does something like the following code exists?
findobj('type','figure','NUMBER OF THE FIGURE',nbrfig)
I tried number, handle, ... instead of 'NUMBER OF THE FIGURE' but nothing works. Need help :) thanks.

Accepted Answer

dpb
dpb on 23 Jul 2013
Edited: dpb on 23 Jul 2013
Since the figure number handles are the integer number, all you really need to do then is use
ishandle(n)
for the desired number.
Or, I'm not seeing the problem...???
  4 Comments

Sign in to comment.

More Answers (6)

Jorg Woehl
Jorg Woehl on 20 Nov 2015
R2014b and later no longer use numeric handles for graphics objects, so most answers given above do not work. In these cases, the following line of code will yield the figure handle to the desired figure:
handle = findobj(allchild(groot), 'flat', 'type', 'figure', 'number', nbrfig)

dpb
dpb on 20 Jul 2013
Most basic is simply (assuming hfig is the handle you're looking for)
ismember(findall(0,'type','figure'),h)
sorts out from all figures whether the one is or is not valid.
ishandle(h) && findobj(h,'type','figure')==h
looks specifically for the one rather than brute force of findall() w/ the added complication must short-circuit if not valid to avoid error in findobj if passed invalid handle.
Many perturbations of the above ideas are possible, obviously...
  1 Comment
Jan
Jan on 20 Jul 2013
Edited: Jan on 20 Jul 2013
ismember sorts the inputs for a binary search. For the small number of figures and for searching one handle only, ANY is faster. Searching all objects wastes time, because the figures are direct children of the root object. Therefore this is can be much faster, when many figures with many HG-objects are open:
any(findobj(allchild(0), 'flat', 'type', 'figure') == h)

Sign in to comment.


Jan
Jan on 20 Jul 2013
Simpler and faster than using FINDOBJ:
ishandle(h) && strcmp(get(h, 'type'), 'figure')

Gaëlle
Gaëlle on 23 Jul 2013
Edited: Gaëlle on 23 Jul 2013
HI, Thank you for your answer, but actually a problem remains. I should have reformulated my question by saying "I want to obtain the handle of a figure without it appearing on the front", especially using the number of the figure rather than the name (so something exactly like findobj but where I could use the number of the figure as argument).

Gaëlle
Gaëlle on 23 Jul 2013
Hi,
I did not know it was possible to simply use the number of the figure as the handle, for example get(120,'Position') would return the position of the figure(120). This is all I neeeded, thank you !
  2 Comments

Sign in to comment.


Evandson Dantas
Evandson Dantas on 13 Oct 2022
Edited: Evandson Dantas on 28 Nov 2022
Try this
h = findall(0,'type','figure','name','figure_name');
if isempty(h)
% Figure doesnt exist
else
% Figure exist
end

Categories

Find more on Specifying Target for Graphics Output in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by