Matlab - colorizar vectores

   
Vista:

colorizar vectores

Publicado por Juli (3 intervenciones) el 21/11/2014 20:04:09
Hola, para graficar vectores utilice la función quiver de matlab, para distinguir su magnitud necesito colorizarlos de acuerdo a ésta, alguien me podría ayudar por favor.

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 Jorge De Los Santos

colorizar vectores

Publicado por Jorge De Los Santos (212 intervenciones) el 23/11/2014 19:58:31
Hola Juli.

Lo que planteas es interesante, y desde luego no es, digamos, muy trivial. Dado que MATLAB no lo soporta nativamente, y por ello el "camino" más viable es acceder a los handles o referencias de los objetos gráficos, y de ahí identificar a que corresponde cada referencia, por ejemplo, tomamos el handles del objeto quiver de la siguiente manera:

1
h = quiver(X,Y,DX,DY);


Se pre-supone que las matrices X, Y, DX y DY han sido creadas previamente. Ahora puede hacerse lo siguiente:

1
2
3
4
5
>> get(h,'type')
 
ans =
 
hggroup


Con lo anterior vemos que la referencia en un hggroup (handles graphics group) o sea un array de referencias de objetos gráficos. Para acceder a cada objeto gráfico utilizamos la función get con la propiedad 'Children' como argumento, por ejemplo:

1
childrens = get(h,'Children');


Y ahora childrens será una matriz que contiene las referencias a las diversas lineas que conforman la gráfica de vectores.

Ahora, no quiero "abrumarte" con estas explicaciones, de modo que te adjunto un pequeño script que contiene un ejemplo del "camino" que podrías seguir para solucionar tu cuestión, como podrás ver grafica los vectores coloreados de acuerdo a un mapa de color especificado, con la "inconveniencia" que omite las "puntas" de los vectores, lo cual habrás de refinar para que trabaje correctamente. Cualquier duda, desde luego que puedes comentarla por este medio.


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
close all;clear;clc;
[X,Y] = meshgrid(-5:0.5:5);
Z = X.^2 + Y.^2;
[DX,DY] = gradient(Z,.2,.2);
h = quiver(X,Y,DX,DY);
ch = get(h,'Children');
XD = get(ch(1),'XData'); % Datos en X
YD = get(ch(1),'YData'); % Datos en Y
XD(isnan(XD))=[]; % Eliminamos los elementos no numéricos (NaN)
YD(isnan(YD))=[]; % lo mismo
Xdiff = abs(XD(2:2:end)-XD(1:2:end));
Ydiff = abs(YD(2:2:end)-YD(1:2:end));
min_mag = min(sqrt(Xdiff.^2 + Ydiff.^2)); % Magnitud máxima  
max_mag = max(sqrt(Xdiff.^2 + Ydiff.^2)); % Magnitud mínima
nc = 24; % Número de colores a utilizar
rangecolor = linspace(min_mag,max_mag,nc); % Intervalo de "posibles" colores
mapcolor = flipud(hsv(nc)); % Mapa de color
figure(); % Creamos una nueva ventana para la gráfica modificada
hold on % Debemos mantener todos los trazos
for i=1:2:length(XD)
    dx = XD(i)-XD(i+1);
    dy = YD(i)-YD(i+1);
    m = sqrt(dx^2+dy^2); % Magnitud del vector actual
    % Buscamos el valor correspondiente en el mapa de color
    k = find(abs(rangecolor - m) < (max_mag - min_mag)/nc, 1);
    % Graficamos utilizando el color seleccionado
    plot(XD(i:i+1),YD(i:i+1),'Color',mapcolor(k,:));
end



Saludos.


Jorge De Los Santos.

E-mail:
delossantosmfq@gmail.com
matlabtyp@gmail.com

Blogs:
Programación en MATLAB: http://matlab-typ.blogspot.mx
Programación en Python, Java, et al... : http://labdls.blogspot.mx
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