MATLAB Answers

# Remove legend items from Figure

538 views (last 30 days)
shdotcom shdotcom on 25 Jan 2019
Commented: shdotcom shdotcom on 25 Jan 2019
In the figure, how to remove the item "aa" from the legennd without changing the shape of other items?
PointStyle = {'kp-', ...
'LineWidth', 1,...
'MarkerEdgeColor', 'k',...
'MarkerFaceColor', [0 0 .8],...
'MarkerSize',9};
plot(Points, PointStyle{:});
hold on
dataStyle = {'Marker','o', ...
'LineWidth', 1,...
'MarkerEdgeColor', [.8 0.4 0.2],...
'MarkerFaceColor', [1 .6 0.2],...
'MarkerSize',7};
plot(data, dataStyle{:});
if n <=3
%toDO
else
legend_str = {'aa','bb','cc'};
legend(legend_str, 'Fontsize',10,'Location', 'southoutside', 'Orientation','horizontal');
end
if n <=3
%toDO
else
legend_str = {'aa','bb','cc'};
legend(legend_str{2}, legend_str{3}, 'Fontsize',10,'Location', 'southoutside', 'Orientation','horizontal');
end
The shape of third item "cc" is changed:

#### 3 Comments

madhan ravi on 25 Jan 2019
https://www.mathworks.com/help/matlab/ref/legend.html#bu_sz6u-1 - create a handle for the plot command and follow the instruction in the given link
shdotcom shdotcom on 25 Jan 2019
@madhan ravi Is it possible to do this without using figure handle?
Also, in my case , the dimensions of plots are not consistent.
I have edited the question
madhan ravi on 25 Jan 2019
Ok see this example , see if this is what you want:
plot(1:10,'-*r')
hold on
plot(2*(1:10),'-vg')
plot(3*(1:10),'-ob')
h=get(gca,'Children'); % grab all the axes handles at once
legendstr={'aa','bb','cc'};
legend(h([1 3]),legendstr{[1 3]}) % see the second label is skipped withoud changing shape
hold off

Sign in to comment.

### Accepted Answer

Lucademicus on 25 Jan 2019
You could do it based on the order of appearance of the plots.
Assuming 'aa' is plot first, then 'bb' and then 'cc':
figure;
hold on
plot(rand(4,1),rand(4,1),'r','DisplayName','Red')
plot(rand(4,1),rand(4,1),'g','DisplayName','Green')
plot(rand(4,1),rand(4,1),'b','DisplayName','Blue')
hPlots = flip(findall(gcf,'Type','Line')); % flipped, because the lines our found in reverse order of appearance.
legend_str = {'aa','bb','cc'};
legend(hPlots(2:3), legend_str(2:3), 'Fontsize',10,'Location', 'southoutside', 'Orientation','horizontal');

#### 1 Comment

shdotcom shdotcom on 25 Jan 2019
It is working!. Thank you. But, I could not undestand why my code is working when data size is [10,100] and it does not, when data size [5,200].

Sign in to comment.

R2018b

### Community Treasure Hunt

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

Start Hunting!

Translated by