# How to add a legend for a plot generated with a function multiple times?

5 views (last 30 days)
Niccolò Bruno on 14 Apr 2023
Commented: Niccolò Bruno on 14 Apr 2023
I am working with orbits around Earth. To plot them, I use a function with the orbital parameters as input. My problem is that I don't know how to create a legend when calling the function more than one time to show on the same plot multiple orbits.
Adding a legend manually like this
plotOrbit(a, e, i, OM, om, th0, thf, dt, mu)
plotOrbit(a1, e1, i1, OM1, om1, th0, thf, dt, mu)
legend("Initial orbit", "Final orbit")
give me a wrong line for the second orbit. (It should be orange instead of a random blue tiny line).
I tried to follow a different approach
txt = 'Initial orbit';
plotOrbit(a, e, i, OM, om, th0, thf, dt, mu, txt)
txt = 'Final orbit';
plotOrbit(a1, e1, i1, OM1, om1, th0, thf, dt, mu, txt)
legend show
Adding this line in the function script
plot3(r(1, :), r(2, :), r(3, :), 'DisplayName',txt, LineWidth=2)
Now the legend shows the right lines, but the result shows 4 extra labels that I don't know how to remove.
ù
Do you know how to solve this? Thank you
Steven Lord on 14 Apr 2023
It's going to be difficult to offer any specific suggestions without seeing what your plotOrbit function is doing.
Niccolò Bruno on 14 Apr 2023
Even if @Antoni Garcia-Herreros helped me already, I add the function for completeness.
function plotOrbit(a, e, i, OM, om, th0, thf, dt, mu)
r = [];
for t = th0:dt:thf
r = [r, parorb2rv(a, e, i, OM, om, t, mu)];
end
% this gives the position in a cartesian frame in the form r = [x; y; z]
figure(1)
plot3(r(1, :), r(2, :), r(3, :), LineWidth=2)
axis equal; % Make the axes scales match
title("Orbits");
hold on; % Add to the plot
Terra3d %function to add the 3d model of the Earth
end

Antoni Garcia-Herreros on 14 Apr 2023
Edited: Antoni Garcia-Herreros on 14 Apr 2023
Hello,
As @Steven Lord pointed out it's hard to suggest anything without knowing how plotOrbit works, but you could try something like this:
plotOrbit(a, e, i, OM, om, th0, thf, dt, mu)
plotOrbit(a1, e1, i1, OM1, om1, th0, thf, dt, mu)
l=legend('Initial orbit','','','Final orbit');
Niccolò Bruno on 14 Apr 2023
Thank you! This works perfectly