Matlab - Crear leyendas para graficas de manera Agrupada

 
Vista:
Imágen de perfil de firius
Val: 45
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por firius (26 intervenciones) el 26/09/2018 07:10:26
Buenas noches, les escribo por si alguien me puede hacer el favor de ayudarme con el siguiente inconveniente.

tengo 2 grupos de señales que quiero graficar en el mismo plot, pero quiero adicionar un legend para diferenciar el primer grupo del segundo, algo como lo que se ve en el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
close all
t=linspace(0,1,10000)';
frec=1:2:6;y=zeros(length(t),length(frec));
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
end
yruidosa=y+0.1*rand(length(t),length(frec));
plot(t,y,'k',t,yruidosa,'b');
legend({'sin ruido','Con ruido'})

el resultado es el siguiente:
untitled
en ese ejemplo grafiqué un conjunto de señales seno de frecuencia variable y un conjunto de las mismas señales contaminadas con ruido y quisiera poner las etiquetas: 'sin ruido' y 'con ruido' pero que la linea que aparece al lado del legend sea del estilo que corresponde, no encuentro como hacerlo, si alguien tiene alguna idea le agradezco me ilustre.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2018 14:45:16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear all
close all
t=linspace(0,1,1000)';
color={'k','b','m','r','g','c'};
frec=1:2:6;
y=zeros(length(t),length(frec));
hold on
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
    plot(t,y(:,n),color{n});
    a{n}=['sin ruido n=',num2str(n)];
    legend(a)
    pause(0.5)
end
yruidosa=y+0.1*rand(length(t),length(frec));
for m=1:length(frec)
   plot(t,yruidosa(:,m),['o',color{n+m}]);
    a{n+m}=['con ruido n=',num2str(m)];
    legend(a)
    pause(0.5)
end
hold off
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2018 15:03:03
1
2
3
4
5
6
7
8
9
10
11
12
clear all
t=linspace(0,1,1000)';
frec=1:2:6;
y=zeros(length(t),length(frec));
%hold on
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
end
   yruidosa=y+0.1*rand(length(t),length(frec));
u=plot(t,y,'b-', t,yruidosa,'r+');
legend({'sin ruido','sin ruido','sin ruido','Con ruido','Con ruido','Con ruido'  }   )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de firius
Val: 45
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por firius (26 intervenciones) el 27/09/2018 05:14:19
Gracias por su respuesta JOSE JEREMIAS, sin embargo, creo que no me hice entender, no quiero etiquetas para cada una de las señales que se grafica, sino que solo aparezcan 2 etiquetas: "con ruido" y "sin ruido", algo similar a su segunda respuesta aunque en vez de que hayan 6 etiquetas con 3 repetidas solo aparezcan 2, asi como en la grafica que puse originalmente pero que la que dice "con ruido" tenga el color que le corresponde a ese grupo de lineas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/09/2018 14:29:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear
close all
t=linspace(0,1,10000)';
frec=1:2:6;
y=zeros(length(t),length(frec));
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
end
   yruidosa=y+0.1*rand(length(t),length(frec));
hold on   
plot(t,y(:,1),'r', t,yruidosa(:,1),'b');
legend({'sin ruido','Con ruido'}  )
plot(t,y,'r', t,yruidosa,'b');
hold of

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de firius
Val: 45
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por firius (26 intervenciones) el 28/09/2018 01:49:29
Entiendo como intentaste hacerlo José, es una solución muy ingeniosa , sin embargo, en mi versión de MatLab no funciona, mira lo que me sale:
untitled
Cuando se ejecuta el segundo plot, se actualiza el legend y aparecen el resto de etiquetas, supongo que ha de ser debido a alguna actualización en mi MatLab, estoy trabajando en la versión R2017b, .

Igual, muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/09/2018 04:39:09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear
close all
t=linspace(0,1,10000)';
frec=1:2:6;
y=zeros(length(t),length(frec));
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
end
   yruidosa=y+0.1*rand(length(t),length(frec));
hold on   
plot(t,y(:,1),'r', t,yruidosa(:,1),'b');
legend({'sin ruido','Con ruido'}  )
plot(t,y,'r', t,yruidosa,'b');
legend({'sin ruido','Con ruido'})
hold off
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de firius
Val: 45
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por firius (26 intervenciones) el 28/09/2018 07:06:25
Con este codigo ya funciono , muchas muchas gracias José, solo le hice una pequeña modificacion, quite un legend que no era necesaria el cual aparece en comentario en el codigo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear
close all
t=linspace(0,1,10000)';
frec=1:2:6;
y=zeros(length(t),length(frec));
for n=1:length(frec)
    y(:,n)=sin(2*pi*frec(n)*t);
end
   yruidosa=y+0.1*rand(length(t),length(frec));
hold on   
plot(t,y(:,1),'r', t,yruidosa(:,1),'b');
%legend({'sin ruido','Con ruido'}  )
plot(t,y,'r', t,yruidosa,'b');
legend({'sin ruido','Con ruido'})
hold off

Para resumir por si a alguien le pasa lo mismo parece ser que la solucion es primero hacer plots de una de las lineas que pertenezcan a cada grupo con su estilo particular, luego con hold on se grafican ahora si todas las lineas de todos los grupos, por ultimo si se llama a legend con los nombres de cada grupo de lineas .

No entiendo la lógica de por qué es así pero bueno, funciona. ¿Cómo se te ocurrió José?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de firius
Val: 45
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por firius (26 intervenciones) el 28/09/2018 07:01:39
Lo que he hecho es copiar y pegar sus codigos para ver como funcionan, asi que mi codigo es el que usted ya pone
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear leyendas para graficas de manera Agrupada

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/09/2018 07:12:32
Si lo probé poniendo comentario y sin comentario al primer legend y daban el mismo resultado. Pero por seguridad de versiones de matlab que va a tener el usuario que va a replicar el código puesto, decidí poner los dos legend en el código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar