How to get handle to legend in a specific axes?

I would like to find the handle to one legend that appears in a specific subplot, while there are a lot of other plots with legends open. I know how to get a handle to all the legends, but not how to find the handle to one specific legend. Here is an example,

%% Make example plot with several subplots and legends

f1 = figure;

nSubplot = 3;

for iPlot = 1:nSubplot

ax(iPlot) = subplot(nPlot,1,iPlot); % Make an axis that will have its own legend

h1 = plot(rand(10,1), rand(10,1), '*'); % Plot some data

hold on;

h2 = plot(rand(10,1), rand(10,1), 'o');

box off;

hIgnore(iPlot) = legend([h1 h2], 'a', 'b'); % Make a legend in this subplot

% I know in this example I could create the legend handle hIgnore when I make the legend,

% but please ignore this approach since in the real code I must find the existing handle

Direct link to this answer

Legends are parented by the figure, not the axes, so you get a list of figure children like this:

>> get( gcf, 'Children' )

ans =

6×1 graphics array:

Legend (a, b)

Axes

Legend (a, b)

Axes

Legend (a, b)

Axes

so I guess if you have the axes handle you may be able to search the figure's child list for the index of that axes, then take the legend handle previous to it (The child objects seem to be stored in reverse order and legends are apparently stored after their respective axes even if not added in that order - I tested creating all the axes and plots first, then all the legends and it still gave the above order)

As ever with having to fish out handles to graphics objects after the fact it is hacky and potentially brittle though.

So, like the joke about an Irishman in a small town being asked how to get to Dublin, answering 'Well, if I were you I wouldn't start from here!', if at all possible I would always keep hold of all my handles when I create the plots if I'm going to need them later on.

I would also give an explicit axes handle to the legend and plotting calls.

This website uses cookies to improve your user experience, personalize content and ads, and analyze website traffic. By continuing to use this website, you consent to our use of cookies. Please see our Privacy Policy to learn more about cookies and how to change your settings.