Matlab - dibujar las diferentes columnas de una matriz

 
Vista:

dibujar las diferentes columnas de una matriz

Publicado por Irene (23 intervenciones) el 07/03/2012 13:15:31
HOla a todos!

estoy teniendo un problema a la hora de dibujar las diferentes columnas de una matriz.
Mi objetivo es la programación de dos botones "forward" y "back". Los he programado mediante toggle button. Mi objetivo es que cada vez que este activo uno de ellos se recorra la matriz por columnas y se dibuje en cada ocasión dicha columna.

Dentro en callback de estos botones realizo la llamada una función: funcion_forward y funcion_back.
(incluyo únicamente una de ellas, pues supongo que sabiendo hacer una la otra será similar)

--------------------------------------------------------------
function[valores]=funcion_forward(x1)

[f,c]=size(x1);

for j=1:c
valores=x1(:,j);

end
---------------------------------------------------------------

y el callback seria el siguiente:
-------------------------------------------------------------------
x1=[1,2,3;10,20,30; 25,55,79];
[valores]=funcion_forward(x1)
isDown=get(hObject,'Value') %Condición de que el botón esté presionado

if isDown
plot (handles.time_axes,t1,valores);
else
pause;
end
------------------------------------------------------
el caso es que siempre me dibuja la misma columna. Estoy probando con una matriz sencilla pero luego tengo que complicar las cosas.

Muchas gracias de antemano, disculpad las molestias.

un saludo!
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

dibujar las diferentes columnas de una matriz

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/03/2012 14:29:35
Hola Irene.
Podrias enviarme tu codigo a mi correo para poder verlo y filtrarte.
YO tambien acabo de hacer tu programa, por mi parte.
En tu codigo que haz copiado tengo varias preguntas.
1. De donde obtengo el valor de t
2. Solo quieres graficar una sola columna de la matriz o varias columnas de la matriz.

Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
[email protected]
http://matlabcaballero.blogspot.com/
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

dibujar las diferentes columnas de una matriz

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/03/2012 15:09:55
Hola Irene.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function varargout = graficar_matriz_por_columnas1_por_Jose_Caballero(varargin)
%% http://www.lawebdelprogramador.com/foros/Matlab/1316898-dibujar_las_diferentes_columnas_de_una_matriz.html
% HOla a todos!
% 
% estoy teniendo un problema a la hora de dibujar las diferentes columnas de
% una matriz. 
% Mi objetivo es la programación de dos botones "forward" y "back". Los he
% programado mediante toggle button. Mi objetivo es que cada vez que este
% activo uno de ellos se recorra la matriz por columnas y se dibuje en cada
% ocasión dicha columna.
% 
% Dentro en callback de estos botones realizo la llamada una función:
% funcion_forward y funcion_back.
% (incluyo únicamente una de ellas, pues supongo que sabiendo hacer una
% la otra será similar
%%
 
 
clc
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @graficar_matriz_por_columnas1_por_Jose_Caballero_OpeningFcn, ...
                   'gui_OutputFcn',  @graficar_matriz_por_columnas1_por_Jose_Caballero_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
 
function graficar_matriz_por_columnas1_por_Jose_Caballero_OpeningFcn...
    (hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
 
function varargout=graficar_matriz_por_columnas1_por_Jose_Caballero_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
 
function Open_Callback(hObject, eventdata, handles)
function OpenFile_Callback(hObject, eventdata, handles)
[archivo,ruta]=uigetfile('*.txt','Abrir Archivo');
if archivo ==0
    return;
else
    matriz=importdata([ruta archivo]);
    handles.matriz=matriz;
end
guidata(hObject, handles);
 
 
function fila_matriz_Callback(hObject, eventdata, handles)
columnas=str2num(get(hObject,'String'));
matriz=handles.matriz;
axes(handles.axes1)
hold on
colores=rand(3,30);
for i=1:length(columnas)
plot(matriz(:,i),'color',[colores(i,1) colores(i,2) colores(i,3) ]);
end
hold on
guidata(hObject, handles);



Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
[email protected]
http://matlabcaballero.blogspot.com/
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

dibujar las diferentes columnas de una matriz

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/03/2012 21:10:55
HOla Irene.
Me enviastes tu archivo, bueno ya lo filtré y te estoy enviando a tu correo y ademas lo estoy poniendo en el foro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
function varargout = grafica_columnas_de_una_matriz_por_jose_caballlero(varargin)
% Mi objetivo esque el usuario seleccione el botón forward y cada
% vez que se pulse dicho botón se realice la presentación de cada
% un canal (columna 1), si vuelve a pulsar forward, entonces se
% presentaria la columna 2, y asi sucesivamente...de un en uno. 
%     Lo mismo ocurriría con el botón back, pero sería en sentido
% inverso. El valor de t, como me preguntabas lo he definido de 
% la forma mas simple posible t=[0:1:2]....aunque en la aplicación
%     real este "t" dependenderá de la fs introducida etc....
 
 
clc
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @grafica_columnas_de_una_matriz_por_jose_caballlero_OpeningFcn, ...
                   'gui_OutputFcn',  @grafica_columnas_de_una_matriz_por_jose_caballlero_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
 
function grafica_columnas_de_una_matriz_por_jose_caballlero_OpeningFcn(hObject, eventdata, handles, varargin)
global k
k=1;
handles.output = hObject;
guidata(hObject, handles);
 
function varargout = grafica_columnas_de_una_matriz_por_jose_caballlero_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
 
 
function Frecuencia_de_Muestreo_Callback(hObject, eventdata, handles)
fs=str2double(get(handles.Frecuencia_de_Muestreo,'string'));
if isnan(fs)
    set(handles.Frecuencia_de_Muestreo,'String','');
    errordlg('El dato introducido en Frec.Muestreo debe ser un número','Error');
    return;
end
handles.fs=fs;
guidata(hObject, handles);
 
function Longitud_temporal_Callback(hObject, eventdata, handles)
t=str2double(get(handles.Longitud_temporal,'string'));
if isnan(t)
    set(handles.Longitud_temporal,'String','');
    errordlg('El dato introducido en Long.Temporal debe ser un número','Error');
    return;
end
handles.t=t;
guidata(hObject, handles);
 
function Escala_Callback(hObject, eventdata, handles)
escala=str2double(get(handles.Escala,'string'));
if isnan(escala)
set(handles.Escala,'String','');
errordlg('El dato introducido en Escala debe ser un número','Error');
return;
end
handles.escala=escala;
guidata(hObject, handles);
 
function adelante_Callback(hObject, eventdata, handles)
global k matriz
fs=handles.fs;
t=handles.t;
escala=handles.escala;
t1=0:1/fs:t;
if k==1;
matriz=rand(length(t1),length(t1));
end
if k==0
    k=1;
end
 
opcion=get(hObject,'Value');
if k>size(matriz,1)
    k=k-1;
    errordlg('Ya se  gráfico toda las columnas de matriz','Error');
    return;
end
if opcion
    valores=matriz(:,k);
    axes(handles.axes2)
     plot(t1,valores);
    k=k+1;
end
guidata(hObject, handles);
 
function atras_Callback(hObject, eventdata, handles)
global k matriz
fs=handles.fs;
t=handles.t;
escala=handles.escala;
t1=0:1/fs:t;
 
opcion=get(hObject,'Value');
if k==0
    errordlg('Ya se  gráfico toda las columnas de matriz','Error');
    return;
end
if opcion
    valores=matriz(:,k);
    axes(handles.axes2)
     plot(t1,valores);
    k=k-1;
end
guidata(hObject, handles);





Saludos.
JOSE JEREMIAS CABALLERO
Servicios de programacion matlab
Asesor de Proyectos con Matlab
programador en matlab
[email protected]


http://www.matlabcaballero.blogspot.com/
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

dibujar las diferentes columnas de una matriz

Publicado por Irene (23 intervenciones) el 07/03/2012 21:38:10
Muchas gracias de nuevo! :))

Por lo que veo no hacia falta realizar llamadas a funciones dentro del callback...
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

dibujar las diferentes columnas de una matriz

Publicado por Irene (23 intervenciones) el 09/03/2012 17:07:29
Hola de nuevo,

He intentado avanzar en mi programa, y ahora mi objetivo es visualizar en una misma gráfica por ejemplo cinco canales, (5 columnas),( sin que estos aparezcan superpuestos). Es decir, numerar el eje Y del uno al 5, y donde esta marcado el 1 en el eje y que se dibuje la columna uno, donde esta marcado el 2, que se dibuje la columna 2 y asi sucesivamente...el bucle que he planteado es el siguiente: (siendo x1=randn(1000,5) )
%------------------------------------------------------------------------
cont=0;
espacio=1;

for i=1:5
valores=x1(:,i);
valores=valores+cont;
cont=cont+1;

axes(handles.time_axes)
plot(t1,valores)

hold on
set (gca,'YTick', 0:espacio:5*espacio)
axis([0 max(t1) 0 5*espacio])
hold off
end

%--------------------------------------------
pero no consigo el resultado deseado, pues solo visualizo un canal y siempre en la misma posición del eje Y.

Espero vuestra ayuda, gracias.
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

dibujar las diferentes columnas de una matriz

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/03/2012 23:34:06
Hola Irene.
Tu quieres:

en el intervalo 0-1, la columna 1 de la matriz,
en el intervalo 1-2, la columna 2 de la matriz.
en el intervalo 2-3, la columna 3 de la matriz.
en el intervalo 3-4, la columna 4 de la matriz.
en el intervalo 4-5, la columna 5 de la matriz.

esos intervalo se refiren al eje Y, caro q se puede hacer, pero lo q pasa es las curvas se superponen en algunos puntos, ya que randn genera valores mayores 1 ó menores a -1 en angunas veces.

para una mayor visualizacion de las curvas yo lo he hecho en el intervalos:

en el intervalo 0-5, la columna 1 de la matriz,
en el intervalo 5-10, la columna 2 de la matriz.
en el intervalo 10-15, la columna 3 de la matriz.
en el intervalo 15-20, la columna 4 de la matriz.
en el intervalo 20-25, la columna 5 de la matriz.

con respecto al eje Y.


Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
[email protected]

http://www.matlabcaballero.blogspot.com/
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

dibujar las diferentes columnas de una matriz

Publicado por Irene (23 intervenciones) el 11/03/2012 11:42:00
HOla,
si, al final lo que he hecho ha sido definir la variable "espacio" con un valor mayor que uno, por la razón que comentabas de que se superponían los canales.
Saludos!
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