Legend inside for loop

Hello,
I want to generate single legend outside for the figure window for all subplots. I am doing plots inside a loop like this:
t,x and y are given datas
for i=1:10
figure()
subplot(2,2,i)
plot(x,y)
hold on
plot(t,y)
subplot(2,2,i)
plot(x,y-y')
hold on
% ........
legend('1','2,','3')
end
But i am still getting the legend on all plots.
any help is appreciated
Dan

6 comentarios

Adam Danz
Adam Danz el 4 de Ag. de 2022
This should produce an error since it appears that you are attempting to generate 10 suplots in a 2x2 grid. But since we don't see the rest of what's going on within the loop, I can't be sure.
It's unclear what the goals is and what the actual results are.
danel james
danel james el 4 de Ag. de 2022
Editada: danel james el 4 de Ag. de 2022
sorry it shoud be (2,5,i) and end is followed
Can you kindly share sample code for this case? thank you dear
Adam Danz
Adam Danz el 4 de Ag. de 2022
I must have missed the end. Thanks.
Adam Danz
Adam Danz el 4 de Ag. de 2022
Move figure out of the loop if you want all suplots within the same figure.
Move Legend out of the loop if you only want to create a legend for the last subplot.
danel james
danel james el 4 de Ag. de 2022
Unfortunatley this method is not working for me, dear KSSV

Iniciar sesión para comentar.

Respuestas (1)

Walter Roberson
Walter Roberson el 4 de Ag. de 2022

0 votos

for i=1:10
figure()
subplot(2,2,i)
H(3*i-2) = plot(x, y, 'displayname', i + "A");
hold on
H(3*i-1) = plot(t, y, 'displayname', i + "B");
subplot(2,2,i)
H(3*i) = plot(x, y-y', 'displayname', i + "C");
hold on
% ........
end
legend(H)
Are you wanting only 3 entries in the legend, total? If so then you would want to be explicit about the line colors, and you would legend(H(1:3))

4 comentarios

danel james
danel james el 4 de Ag. de 2022
I have to use get 10 plots and i am using subplot(2,5,i) .
thank you
for i=1:10
subplot(2,5,i)
H(3*i-2) = plot(x, y, 'displayname', i + "A");
hold on
H(3*i-1) = plot(t, y, 'displayname', i + "B");
H(3*i) = plot(x, y-y', 'displayname', i + "C");
hold off
% ........
end
legend(H)
danel james
danel james el 4 de Ag. de 2022
I used your code to modify mine and its giving me this :
Error using legend (line 272)
Invalid argument. Type 'help legend' for more
information.
Error in single_legend (line 122)
legend(H)
x = 1:10; y = rand(size(x));
for i=1:10
subplot(2,5,i)
H(3*i-2) = plot(x, y, 'displayname', i + "A");
hold on
H(3*i-1) = plot(x, y, 'displayname', i + "B");
H(3*i) = plot(x, y-y', 'displayname', i + "C");
hold off
% ........
end
Unable to perform assignment because the left and right sides have a different number of elements.
legend(H)
What size is y? If y is a vector then y - y' creates a square matrix in which each element of y is subtracted from each other element of y; the result of plotting that would be multiple lines.

Iniciar sesión para comentar.

Etiquetas

Preguntada:

el 4 de Ag. de 2022

Comentada:

el 4 de Ag. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by