How to make a legend for a plot within a for loop

64 views (last 30 days)
Sue MM on 18 Jul 2018
Commented: Sue MM on 18 Jul 2018
HI! I am currently plotting a graph (with 3 different entries) and I want to create a legend within the for loop that would show each iteration for the 3 different I/O how should I approach this? The current legend i have does not update with each iteration

Will Fritz on 18 Jul 2018
Hi, can you provide a little more context to your issue. For example, do you have three different plots? Or just one where the legend changes every iteration? Any code provided to help frame this would be appreciated
Sue MM on 18 Jul 2018
I have 2 bode plots that I am plotting on the same figure within the for loop.
figure(1)
bode(sys1)
grid on
hold on
margin(sys2)
I am trying to create a legend that will distinguish between each iteration of the bode plot that it is printing

Adam Danz on 18 Jul 2018
It's strange that bode() doesn't seem to output the plot handles.
Anyway, here are two options using fake data; the first is best if your code can be adapted to it.
Fake data
H1 = tf([1 0.1 7.5],[1 0.12 9 0 0]);
H2 = tf([1 0.3 7.5],[1 0.12 9 0 0]);
H3 = tf([1 0.5 7.5],[1 0.12 9 0 0]);
Option 1: no loop
bode(H1, 'r', H2, 'b', H3, 'k')
legend({'H1', 'H2', 'H3'})
Option 2: with loop * you have to 'hold' your axes!
values = {H1, H2, H3};
for i = 1:length(values)
H = values{i};
bode(H)
% If this is the first iteration, get the axis handles
if i == 1
axh = findall(gcf, 'type', 'axes');
ax1 = axh(3); %upper axis
ax2 = axh(2); %lower axis
hold(ax1, 'on');
hold(ax2, 'on');
end
end
legend(ax1, {'H1', 'H2', 'H3'})
legend(ax2, {'H1', 'H2', 'H3'})

1 Comment

Sue MM on 18 Jul 2018
Thanks!!