Remove the legends for some lines in a plot

94 views (last 30 days)
Hello,
I want to plot some data points and fit a line to the data. I have done so and everything is ok; the only issue is there are some more items in the legend box corresponding to the fitted lines.
C=['b','r','g','m'];
format short
a=1:4;
for i=1:length(a)
scatter(LT, Ra(i,:),C(i),'filled');
hold on
end
grid on
grid minor
xticks([30, 40, 50, 60, 70])
xticklabels({'30','40','50','60','70'})
for i=1:4
coeffs = polyfit(LT, Ra(i,:), 1);
% Get fitted values
fittedX = linspace(min(LT), max(LT), 200);
fittedY = polyval(coeffs, fittedX);
% Plot the fitted line
plot(fittedX, fittedY,C(i) , 'LineWidth', 2);
end
lgd=legend('25%','50%','75%','100%','FontSize',20)
lgd.Title.FontSize = 20;
The resulted figure is as follows:
Although I only have
lgd=legend('25%','50%','75%','100%','FontSize',20)
in the script, the fitted lines are unwantedly shown in the legend box with no dedicated name:
My question:
How can I get rid of those extra lines in the legend box?
Any help is highly appredicated!

Accepted Answer

Star Strider
Star Strider on 25 Jun 2020
How can I get rid of those extra lines in the legend box?
Refer only to the scatter plots by handle reference:
LT = 0.5:9.5;
Ra = randn(4,numel(LT));
C=['b','r','g','m'];
hold on
for i = 1:size(Ra,1)
hs(i) = scatter(LT, Ra(i,:),C(i),'filled'); % Return Handles To ‘scatter’ Objects
coeffs = polyfit(LT, Ra(i,:), 1);
fittedX = linspace(min(LT), max(LT), 200);
fittedY = polyval(coeffs, fittedX);
plot(fittedX, fittedY,C(i) , 'LineWidth', 2);
end
hold off
lgd=legend(hs, '25%','50%','75%','100%','FontSize',20); % Use Only ‘scatter’ Objects In ‘legend’ call
Include the other lines in your code that I omitted here.
.
  4 Comments
Rodrigo Martinez
Rodrigo Martinez on 2 May 2022
Dear Star Strider,
I've been working for a while with Matlab but I have always worked with my own data and figures. This time, however, my colleague sent me these figures I need to put in a paper. The legneds I need to modify are exactly the same as the ones in this post: scatter data and fit curves for which I don't need legends. Is it possible to get rid of the extra legends without needing to ask for the data to create new figures?
All the best,
Star Strider
Star Strider on 2 May 2022
@Rodrigo Martinez — I am not certain that I understand what you want.
One option to select only some data series for the legend might be to use 'DisplayName' —
LT = 0.5:9.5;
Ra = randn(4,numel(LT));
C=['b','r','g','m'];
dnv = 25:25:100;
hold on
for i = 1:size(Ra,1)
hs(i) = scatter(LT, Ra(i,:),C(i),'filled', 'DisplayName',sprintf('%.0f%%',dnv(i))); % Return Handles To 'scatter' Objects, Use 'DisplayName'
coeffs = polyfit(LT, Ra(i,:), 1);
fittedX = linspace(min(LT), max(LT), 200);
fittedY = polyval(coeffs, fittedX);
plot(fittedX, fittedY,C(i) , 'LineWidth', 2);
end
hold off
lgd=legend(hs([1 4]),'FontSize',20, 'Location','best'); % Use Only Selected 'scatter' Objects In 'legend' Call
.

Sign in to comment.

More Answers (1)

dpb
dpb on 25 Jun 2020
If you only want the scatter points in legend, set the 'Annotation' property to not show the lines...
plot(fittedX, fittedY,C(i) , 'LineWidth', 2,'Annotation','off');

Community Treasure Hunt

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

Start Hunting!