Matlab - Nuevo Reto...

 
Vista:

Nuevo Reto...

Publicado por Arnold Torres (26 intervenciones) el 04/10/2011 04:18:48
Hola a todos... Llego con un nuevo reto. Se trata de lo siguiente: Estoy haciendo un programa, que entre otras cosas, tiene que mostrar una salida, en este caso, una grafica. Esa gráfica se genera a travez de un for, es decir, son varias gráficas en una (todo de forma automática), para ilustrarlos, supongamos que tengo el vector x = [1:30] y una matriz de 30x4 (cualquiera) y a travez de un for graficar x contra cada columna de dicha matriz, lo cual resultará en 4 gráficas en una sola figura. Hasta ahi se como hacer todo, no representa mayor reto, el verdadero reto para mi es darle nombre a cada grafica y que se pueda, por supuesto, visualizar en la figura generada. Manualmente esto se hace yendo a la figura, dando click a "Insert Leyend", etc.. pero yo tengo que hacer que esto se haga de forma automatica, ya que se trata de una salida a un programa con interfaz gráfica que muestra a un usuario los resultados de una simulación, como se dice popularmente: No puedo hecharle mano a nada... A travez de la siguiente linea de codigo le doy color a cada grafica
plot (x,y,'Color', [ rand, rand, rand ]).. donde "y" es cada columna de la matriz que mencioné antes.
Si como bono extra alguien me puede ayudar tambien con la localización de la leyenda... mucho mejor, esto se logra, manualmente, dando click derecho sobre la leyenda/Locatiion/etc.... pero recuerden que debo hacerlo de forma automática.. 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

Nuevo Reto...

Publicado por Arnold Torres (26 intervenciones) el 04/10/2011 04:57:09
Para los que esten interesados en ayudarme en el reto...
He estado haciendo pruebas con el siguiente código. Lo pueden copiar y pegar tal cual (crear un archivo *.m)
clc
clear all

ErroresAbsolutos=cell(38,4);
ErroresAbsolutos{2,2} = 100;
ErroresAbsolutos{3,2} =98.5;
ErroresAbsolutos{4,2} =97.3;
ErroresAbsolutos{5,2} =100;
ErroresAbsolutos{6,2} =99;
ErroresAbsolutos{7,2} =97;
ErroresAbsolutos{8,2} =96;
ErroresAbsolutos{9,2} =95;
ErroresAbsolutos{10,2} =94;
ErroresAbsolutos{11,2} =93;
ErroresAbsolutos{12,2} =97.4;
ErroresAbsolutos{13,2} =85;
ErroresAbsolutos{14,2} =65;
ErroresAbsolutos{15,2} =66;
ErroresAbsolutos{16,2} =67;
ErroresAbsolutos{17,2} =68;
ErroresAbsolutos{18,2} =69;
ErroresAbsolutos{19,2} =70;
ErroresAbsolutos{20,2} =71;
ErroresAbsolutos{21,2} =79;
ErroresAbsolutos{22,2} =89.4;
ErroresAbsolutos{23,2} =90.3;
ErroresAbsolutos{24,2} =100;
ErroresAbsolutos{25,2} =87.9;
ErroresAbsolutos{26,2} =88.4;
ErroresAbsolutos{27,2} =99;
ErroresAbsolutos{28,2} =98;
ErroresAbsolutos{29,2} =97;
ErroresAbsolutos{30,2} =96;
ErroresAbsolutos{31,2} =95;
ErroresAbsolutos{32,2} =94;
ErroresAbsolutos{33,2} =93;
ErroresAbsolutos{34,2} =92;
ErroresAbsolutos{35,2} =91;
ErroresAbsolutos{36,2} =95.9;
ErroresAbsolutos{37,2} =87.8;
ErroresAbsolutos{38,2} =95.8;

ErroresAbsolutos{2,3} = 99.0;
ErroresAbsolutos{3,3} =95.5;
ErroresAbsolutos{4,3} =98.3;
ErroresAbsolutos{5,3} =99.5;
ErroresAbsolutos{6,3} =99.7;
ErroresAbsolutos{7,3} =96;
ErroresAbsolutos{8,3} =94;
ErroresAbsolutos{9,3} =97;
ErroresAbsolutos{10,3} =99;
ErroresAbsolutos{11,3} =100;
ErroresAbsolutos{12,3} =98.2;
ErroresAbsolutos{13,3} =95;
ErroresAbsolutos{14,3} =75;
ErroresAbsolutos{15,3} =68;
ErroresAbsolutos{16,3} =69;
ErroresAbsolutos{17,3} =68;
ErroresAbsolutos{18,3} =67;
ErroresAbsolutos{19,3} =77;
ErroresAbsolutos{20,3} =78;
ErroresAbsolutos{21,3} =75;
ErroresAbsolutos{22,3} =81.4;
ErroresAbsolutos{23,3} =93.3;
ErroresAbsolutos{24,3} =97.0;
ErroresAbsolutos{25,3} =89.9;
ErroresAbsolutos{26,3} =82.4;
ErroresAbsolutos{27,3} =95;
ErroresAbsolutos{28,3} =97;
ErroresAbsolutos{29,3} =99;
ErroresAbsolutos{30,3} =95;
ErroresAbsolutos{31,3} =93;
ErroresAbsolutos{32,3} =97;
ErroresAbsolutos{33,3} =95;
ErroresAbsolutos{34,3} =96;
ErroresAbsolutos{35,3} =94;
ErroresAbsolutos{36,3} =98.9;
ErroresAbsolutos{37,3} =88.8;
ErroresAbsolutos{38,3} =99.8;

ErroresAbsolutos{2,4} = 89.0;
ErroresAbsolutos{3,4} =75.5;
ErroresAbsolutos{4,4} =88.3;
ErroresAbsolutos{5,4} =69.5;
ErroresAbsolutos{6,4} =97.7;
ErroresAbsolutos{7,4} =94;
ErroresAbsolutos{8,4} =98;
ErroresAbsolutos{9,4} =91;
ErroresAbsolutos{10,4} =89;
ErroresAbsolutos{11,4} =92.00;
ErroresAbsolutos{12,4} =94.2;
ErroresAbsolutos{13,4} =97;
ErroresAbsolutos{14,4} =85;
ErroresAbsolutos{15,4} =78;
ErroresAbsolutos{16,4} =89;
ErroresAbsolutos{17,4} =98;
ErroresAbsolutos{18,4} =77;
ErroresAbsolutos{19,4} =87;
ErroresAbsolutos{20,4} =98;
ErroresAbsolutos{21,4} =65;
ErroresAbsolutos{22,4} =71.4;
ErroresAbsolutos{23,4} =83.3;
ErroresAbsolutos{24,4} =77.0;
ErroresAbsolutos{25,4} =69.9;
ErroresAbsolutos{26,4} =92.4;
ErroresAbsolutos{27,4} =85;
ErroresAbsolutos{28,4} =77;
ErroresAbsolutos{29,4} =89;
ErroresAbsolutos{30,4} =75;
ErroresAbsolutos{31,4} =83;
ErroresAbsolutos{32,4} =92;
ErroresAbsolutos{33,4} =94;
ErroresAbsolutos{34,4} =98;
ErroresAbsolutos{35,4} =99;
ErroresAbsolutos{36,4} =93.9;
ErroresAbsolutos{37,4} =89.8;
ErroresAbsolutos{38,4} =91.8;



[fil_err,col_err] = size(ErroresAbsolutos);

barrasreg = [1:30,32 34 35 38 40 45 50]; % Entrada: Nodos registro
barrasreg2 = [1:length(barrasreg)];

for xc = 2:col_err
cont=1;
for k = 2:fil_err
y(cont) = ErroresAbsolutos{k,xc};
cont=cont+1;
end
plot (barrasreg2,y,'Color', [ rand, rand, rand ])
xlabel('Barra fallada')
ylabel('Error absoluto (%)')
set(gca,'Xtick',barrasreg2,'XTickLabel',{barrasreg})
hold on
grid on
end

Se daran cuenta que se genera una figura con tres graficas de diferente color. Entonces, como hago para que en la figura aparezca la leyenda con el nombre de cada grafica
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

Nuevo Reto...

Publicado por Arnold Torres (26 intervenciones) el 05/10/2011 03:41:10
Ah... ok... He seguido con las pruebas... tengo una forma parcial de resolverlo... mira con este... esta es la ultima parte del codigo

[fil_err,col_err] = size(ErroresAbsolutos);

barrasreg = [1:30,32 34 35 38 40 45 50]; % Entrada: Nodos registro
barrasreg2 = [1:length(barrasreg)];
resis = [1 2 3];

for xc = 1:length(resis)
cont=1;
for k = 2:fil_err
y(cont) = ErroresAbsolutos{k,xc+1};
cont=cont+1;
end
plot (barrasreg2,y,'Color', [ rand, rand, rand ])
xlabel('Barra fallada')
ylabel('Error absoluto (%)')
set(gca,'Xtick',barrasreg2,'XTickLabel',{barrasreg})
hold on
grid on
end
legend('RF = 1','RF = 2','RF = 3','Location','Best')

Bueno... la verdad es el mismo que el anterior, solo agregué la ultima linea, la que contiene el comando "legent". La solucion es parcial porque en este caso se que son tres gráficas.. entonces pongo esta linea: legend('RF = 1','RF = 2','RF = 3','Location','Best').... Pero resulta que en la realidad no se cuantas gráficas son, como dije antes, eso depende de una entrada que será determinada por el usuario... Entonces... el reto se reduce a como usar el comando "legent" para cuando no se cuantas gráficas son...
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

Nuevo Reto...

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/10/2011 04:40:47
hola Arnold.
%==================================
clc
close all
clear all
ErroresAbsolutos=[
100.0000 99.0000 89.0000
98.5000 95.5000 75.5000
97.3000 98.3000 88.3000
100.0000 99.5000 69.5000
99.0000 99.7000 97.7000
97.0000 96.0000 94.0000
96.0000 94.0000 98.0000
95.0000 97.0000 91.0000
94.0000 99.0000 89.0000
93.0000 100.0000 92.0000
97.4000 98.2000 94.2000
85.0000 95.0000 97.0000
65.0000 75.0000 85.0000
66.0000 68.0000 78.0000
67.0000 69.0000 89.0000
68.0000 68.0000 98.0000
69.0000 67.0000 77.0000
70.0000 77.0000 87.0000
71.0000 78.0000 98.0000
79.0000 75.0000 65.0000
89.4000 81.4000 71.4000
90.3000 93.3000 83.3000
100.0000 97.0000 77.0000
87.9000 89.9000 69.9000
88.4000 82.4000 92.4000
99.0000 95.0000 85.0000
98.0000 97.0000 77.0000
97.0000 99.0000 89.0000
96.0000 95.0000 75.0000
95.0000 93.0000 83.0000
94.0000 97.0000 92.0000
93.0000 95.0000 94.0000
92.0000 96.0000 98.0000
91.0000 94.0000 99.0000
95.9000 98.9000 93.9000
87.8000 88.8000 89.8000
95.8000 99.8000 91.8000];


[fil_err,col_err] = size(ErroresAbsolutos);
barrasreg=[1:30,32 34 35 38 40 45 50]; % Entrada: Nodos registro
barrasreg2=1:length(barrasreg);
y=zeros(fil_err,col_err);
for xc=1:col_err
for k=1:fil_err
y(k,xc)=ErroresAbsolutos(k,xc);
end
end

hold on
for i=1:xc
plot(barrasreg2,y(:,i),'color',[rand rand rand], 'linewidth',3)
a{i}=['y',num2str(i)];
end
hold off
localizacion=legend(a);
set(localizacion,'Location','NorthWest')
xlabel('Barra fallada')
ylabel('Error absoluto (%)')
set(gca,'Xtick',barrasreg2,'XTickLabel',barrasreg)
grid on
%===================================


saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
[email protected]
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

Nuevo Reto...

Publicado por Arnold Torres (26 intervenciones) el 05/10/2011 05:06:45
Uy... Excelente !!!... Gracias maestro
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