How to get handle to legend in a specific axes?
Show older comments
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
end
%% Now try to get handle to legend from first subplot
hLeg = findobj('tag','legend'); % Returns handles to *all* legends, which we don't want
% Try to get handle to legend in first subplot only
hLeg = findobj(ax(1), 'tag','legend'); % Returns nothing, even though ax(1) is handle to first subplot
Accepted Answer
More Answers (1)
FWDekker
on 15 Nov 2024
0 votes
The function legend allows you to pass an axes object, for which it will return the legend. So in your case, to get the legend of the first sub-figure, simply do legend(ax(1)). To see that this works, run title(legend(ax(1)), "My Title"), and only the title of the first legend will change.
(If someone tries to run OP's code and gets an error, note that nPlot should actually be nSubplot.)
Categories
Find more on Legend 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!