Remove the legends for some lines in a plot
41 views (last 30 days)
Show older comments
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!
0 Comments
Accepted Answer
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
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
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
.
More Answers (1)
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');
0 Comments
See Also
Categories
Find more on Data Distribution Plots 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!